概要:
快速排序(Quicksort)是对
冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以
递归进行,以此达到整个数据变成有序
序列。
方法:
对于下列数组arr:
选一个中间量:
int v=arr[1]=4;
经过一次快速排序之后:
之后再对v<4,和v>4的两部分进行递归快速排序,最后就完成了对数组的排序。
步骤:(针对以上数组)
1:取一个中间变量:int v=arr[1]; j=1;i=2;
2:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;
3:arr[i]>v----->i++;
4:arr[i]>v----->i++;
5:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;
6:arr[i]<v--->swap(arr[i],arr[j+1]),j++,i++;
7:arr[i]>v----->i++;
8:最后一步:将v与arr[j]交换:swap(arr[1],arr[j]);
这样就完成了一次快速排序,接下就是利用递归对<v,>v两部分再进行快速排序。
注意:要对着arr[i.....j],arr[j+1....8]两部分进行递归,每次必须return j;这个位置。
代码:
#include<iostream>
using namespace std;
int partition(int arr[], int l, int r) {
int v = arr[l];
int j = l;
for (int i = l + 1; i <= r; i++)
if (arr[i] < v) {
j++;
swap(arr[j], arr[i]);
}
swap(arr[l], arr[j]);
//返回j的位置
return j;
}
void quickSort(int arr[], int l, int r) {
if( l >= r )
return;
int p = _partition2(arr, l, r);
quickSort(arr, l, p - 1);
quickSort(arr, p + 1, r);
}
int main() {
int arr[8] = { 4,3,7,8,2,1,6,5 };
quickSort(arr,0,7);
for (int i = 0; i < 8; i++)
{
cout << arr[i] << " ";
}
return 0;
}
结果:
优化:
总结:认真领悟