您的位置:首页 > 理论基础 > 数据结构算法

数据结构自用笔记(七):快速排序

2020-07-29 13:31 375 查看

数据结构自用笔记(七):快速排序

class Program
{
//对数组dataarray中索引从left(开始索引)到right(结束索引)之间的数据排序
static void quicksort(int[] dataarray,int left,int right)
{
if (left < right)
{
//基准数 把比他小或者等于他的放在他的左边,比他大的放在他的右边
int x = dataarray[left];
int i = left;
int j = right;//用来做循环的标志位

while(true&&i<j)//当i等于j的时候 说明我们找到了一个中间的位置 这个中间位置就是基准数应该所在的位置
{
//从右往左比较,找一个比x小(或等于)的数字,放到坑里 坑位于i的位置
while (true && i < j)
{
//找到一个比基准数 小于或者等于的数字,应该把他放在x 的左边
if (dataarray[j] <= x)
{
dataarray[i] = dataarray[j];
break;
}
else
{
j--;//像左移动到下一个数字 然后作比较
}
}

//从左向右找一个比x大的数字  放在我们的坑里 现在的坑位于j的位置
while (true && i < j)
{
if (dataarray[i] > x)
{
dataarray[j] = dataarray[i];
break;
}
else
{
i++;
}
}
}

//跳出循环  现在i等于j i是中间的位置
dataarray[i] = x;

//来个递归
quicksort(dataarray,left,i-1);
quicksort(dataarray, i+1, right);

}
}
static void Main(string[] args)
{
//测试
int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };

quicksort(data, 0, data.Length - 1);

foreach (var temp in data)
{
Console.WriteLine(temp + " ");
}
Console.ReadKey();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: