基本思想
1.从数列中取一个数做哨兵(默认第一个数)
2.从左到右找到一个比哨兵大的数放到右边,再从右到左找到一个比哨兵小的数放到左边
3.以哨兵为分界线,进行分组
4.每个分组接着1.2.3循环,直到每个分组只有一个数
排序过程
C语言实例
//第一个参数是数组,第二个参数的数组左指针,第三个参数是数组的右指针
int sort(int *data, int left, int right) {
if (left >= right) return 0; //直到分组只有一个数,就是排序完成
int i = left;
int j = right;
int key = data[left]; //以数组左指针的数为哨兵
while (i < j) { //只要左指针还在右指针的左边,继续排序
while (i < j && key < data[j]) { //从右到左找到比哨兵小的数
j --;
}
data[i] = data[j]; //把数放到左指针的位置
while (i < j && key >= data[i]) { //从左到右找到比哨兵大的数
i ++;
}
data[j] = data[i]; //把数放到右指针的位置
}
data[i] = key; //当i==j,排序完成,把哨兵放到当前位置的位置
//
sort(data, left, i-1); //以哨兵为分界线,把左边的数组继续排序
sort(data, i+1, right); //以哨兵为分界线,把右边的数组继续排序
}
int quick_sort(int *data, int length) {
sort(data, 0, length-1);
}
总结
快速排序就是每次排序都从数列中取出一个数做基准值,把左边比基准值大的放到右边,把右边比基准值小的放到左边,然后以基准值为分界线进行分组,直到每个分组只有一个数