快速排序(C++版)

来源:互联网 发布:值得推荐的淘宝店铺 编辑:程序博客网 时间:2024/06/14 06:12

A[p,r]进行快速排序的3步分治过程:

1,分解。数组A[p,r]被划分为两个(可能为空的)子数组A[p,q-1]和A[q+1,r],使得A[p,q-1]中的每个元素都小于A[q],而A[q]也小于或者等于A[q+1,r]中的每一个元素。

2,解决。递归调用快速排序,对A[p,q-1]和A[q+1,r]进行排序。

3,合并。因为是原址排序所以不用合并。


C++代码:

/*** name:快速排序* time:15/8/11 15:25* environment: ubuntu 14.04,sublime text 3*/#include <iostream>#include <algorithm>using namespace std;/** 打印数组*/void printArray(int array[],int length){    for (int i = 0; i < length; ++i)    {        cout << array[i] << endl;    }}/** 原址重排*/int partition(int *array,int p,int r){int temp = array[r];int i = p - 1;for (int j = p; j <= r-1; ++j){if(array[j] <= temp){ i = i + 1;                 //记录比temp小的位置swap(array[j],array[i]);   //交换大小}}swap(array[i+1],array[r]);   //把temp放在比他小的后面,比他大的前面return i+1;                  //得到temp这个数在数组中的位置}void quick(int *array,int p,int r){if(p < r){int q = partition(array,p,r);quick(array,p,q-1);quick(array,q+1,r);}}int main(int argc, char const *argv[]){int a[10] = {11,22,21,14,17,33,28,25,19,26};int end = 10 - 1;  //数组从0开始,结束位置是9不是10quick(a,0,end);//cout << partition(a,0,9) <<endl;printArray(a,10);return 0;}

在这再补一下:

快速排序的最坏情况下时间复杂度为:O(n^2),而期望时间复杂度是:O(nlgn)。。


0 0
原创粉丝点击