一 快速排序
快速排序采用了分治思想和递归思想。
二 代码
数据结构p274(清华大学出版社,严蔚敏)
#include <iostream>
using namespace std;
// 交换数组的两个成员
void quick_sort_swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/**
* 快速排序
*/
void quick_sort(int arr[],int left,int right) {
// 左游标大于等于右游标
if (left >= right) {
return;
}
// 左游标
int i = left;
// 右游标
int j = right + 1;
// 将最左边的元素,作为分界值(枢纽)
int key = arr[left];
while (true) {
while (arr[++i] < key) {
if (i == right) {
break;
}
}
while (arr[--j] > key) {
if (j == left) {
break;
}
}
// 退出死循环
if (i >= j) {
break;
}
// 交换左、右游标指向的数
quick_sort_swap(arr, i, j);
}
// 交换左边界值与左游标指向的值
quick_sort_swap(arr,left,j);
// 递归处理分界值左边的部分
quick_sort(arr, left, j - 1);
// 递归处理分界值右边的部分
quick_sort(arr, j + 1, right);
}
int main()
{
// 待排序数组
int nums[] = { 57,68,59,52,72,28,96,33,24 };
// 数组的长度:9
int length = sizeof(nums) / sizeof(nums[0]);
quick_sort(nums, 0, length-1);
for (int i = 0; i < length; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
三 示意图