快速排序总结及poj代码

来源:互联网 发布:windows dhcp client 编辑:程序博客网 时间:2024/05/22 00:03

1、快速排序的思想提炼
  首先,快速排序利用了分治的思想,总的来说利用了递归的方法;先对数组进行划分,是数组一部分小于主元,一部分大于主元,然后再对两部分分别快速排序;
2、快速排序的时间复杂度分析
  最坏情况:O(n2)
  平均情况:O(nlogn)
  快速排序的平均运行时间更接近于其最好情况,而非最坏情况
3、快速排序实践
  poj2388
  代码如下:

#include <iostream>using namespace std;void quickSort(int* milk,int head,int tail);int partition(int* milk,int head,int tail);void exchange(int* milk,int i,int j);int main(){    int n;    while(cin>>n){        int* milk=new int[n];        for(int i=0;i<n;i++){            cin>>milk[i];        }        quickSort(milk,0,n-1);        cout<<milk[n/2]<<endl;        delete milk;    }    return 0;}void quickSort(int* milk,int head,int tail){    int mainElement;    if(head<tail){        mainElement = partition(milk,head,tail);        quickSort(milk,head,mainElement-1);        quickSort(milk,mainElement+1,tail);    }}int partition(int* milk,int head,int tail){    int referValue=milk[tail];    int small=head-1;    for(int goThrough=head;goThrough<tail;goThrough++){        if(milk[goThrough]<referValue){            small++;            exchange(milk,small,goThrough);        }    }    exchange(milk,small+1,tail);    return small+1;}void exchange(int* milk,int i,int j){    int temp=milk[j];    milk[j]=milk[i];    milk[i]=temp;}
0 0