快速排序算法。好复杂。
- # 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); //对右区间排序
- }
复制代码 |
|