黑马程序员技术交流社区
标题:
C语言之快速排序算法
[打印本页]
作者:
strongfish
时间:
2015-7-15 10:06
标题:
C语言之快速排序算法
快速排序算法。好复杂。
# include <stdio.h>
void qusort(int[], int, int);
int main()
{
int arr[10] = { 9, 5, 3, 8, 0, 3, 4, 2, 5, 6 }; //定义需要排序的数据
qusort(arr, 0, 9); //执行排序函数
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]); //排序后的数据输出
}
putchar('\n');
return 0;
}
void qusort(int arr[], int begin, int end) //第一个参数为需要排序的数组 第二个参数和第三参数确定 需要排序的数据区间
{
if (end - begin < 1) return; //元素太少 则不需要排序
int left = begin; // 左索引
int right = end; // 右索引
int standard = arr[begin];// 基准值
while (left < right)
{
while (left < right && standard < arr[right]) right--; //从右向左 查找小于基准值的索引
if (left < right) //如果找到了则 left<right 否则 left == right
{
arr[left] = arr[right]; //将找到的值放到相应的位置(分界之左)
left++; //左位置右移一个索引
}
while (left < right && arr[left] <= standard) left++; //从左向右 查找大于基准的值得索引
if (left < right) //如果找到了则 left<right 否则 left == right
{
arr[right] = arr[left]; //将找到的值放入相应的位置(分界之右)
right--; //右位置左移一个索引
}
}
arr[left] = standard; //将基准值放置到分界点(分界点是不确定的)
//递归调用
qusort(arr, begin, right - 1); //对左区间排序
qusort(arr, right + 1, end); //对右区间排序
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2