快速排序

来源:互联网 发布:patternlayout源码 编辑:程序博客网 时间:2024/05/22 00:44
快速排序是对冒泡排序的一种改进。它的基本思想是,通过一趟排序将待排序数组分割成独立的两部分,其中一部分元素均比另一部分元素的值要小,则可以分别对这两部分元素继续进行排序,以达到整个数组有序,在代码实现中,我们选择最后一个元素作为枢轴。用枢轴把数组元素分割成两部分。平均时间复杂度为o(nlogn)。
#include<iostream>#include<time.h>using namespace std;int partition(int arr[],int start,int end){int value = arr[end];int j = start - 1;for(int i = start; i < end; ++i){if(arr[i] <= value){swap(arr[j + 1],arr[i]);j++;}}swap(arr[j + 1],arr[end]);return j + 1;}void quicksort(int arr[],int start,int end){if(start < end){int mid = partition(arr,start,end);int tmp = mid;while(arr[mid] == arr[tmp]){tmp--;}quicksort(arr,start,tmp);quicksort(arr,mid + 1,end);}}int main(void){int num;cout<<"请输入数组的大小:";cin>>num;int *arr = new int[num];for(int i = 0; i < num; ++i){arr[i] = rand();//数组中元素的范围0~2^16之间}clock_t start, finish;start = clock(); quicksort(arr,0,num - 1);finish = clock(); cout<<(finish - start) / CLOCKS_PER_SEC * 1000<<endl;system("pause");return 0;}
实验结果:(单位ms)请输入数组的大小:100000排序时间:0请输入数组的大小:1000000排序时间:0请输入数组的大小:10000000排序时间:0请输入数组的大小:100000000排序时间:7000排序1亿个数用的时间大约是7秒。我们使用同样的数据集,使用标准库提供的sort算法。
#include<iostream>#include<algorithm>#inlcude<time.h>using namespace std;int main(void){int num;cout<<"请输入数组的大小:";cin>>num;int *arr = new int[num];for(int i = 0; i < num; ++i){arr[i] = rand();}clock_t start, finish;start = clock(); sort(arr,arr + num);finish = clock(); cout<<(finish - start) / CLOCKS_PER_SEC * 1000<<endl;system("pause");return 0;}
请输入数组的大小:100000000排序时间:8000标准库中的sort算法,比我们自己写的算法要慢一点。

0 0
原创粉丝点击