快速排序

来源:互联网 发布:淘宝店铺宝贝上架教程 编辑:程序博客网 时间:2024/06/02 06:02
#include <iostream>using namespace std;/*算法思想1.将数组首位元素作为划分基准t 2.   从后往前寻找小于 t的元素 交换之3.   从前往后寻找大于等于 t的元素    交换之4.填写基准元素5.返回划分位置。 */int partition(int *data,int l,int r){     int t=data[l];     while(l<r){     while(l<r&&data[r]>=t)         --r;     data[l]=data[r];     while(l<r&&data[l]<t)         ++l;     data[r]=data[l]; } data[l]=t; return l;}void quick_sort(int *data,int l,int r){   if(l<r){ int mid= partition(data,l,r); quick_sort(data,l,mid-1); quick_sort(data,mid+1,r);   }}int main(){int a[10]={34,1,56,3,24,5,6,3,8,0};    quick_sort(a,0,9);for(int i=0;i<10;++i)cout<<a[i]<<" ";return 0;}

解法二:

#include <iostream>#include <algorithm>#include <vector>using namespace std;    /* 基准选择:data[left] data[center] data[right] 的值进行比较1. data[left]=min(data[right],data[left],data[mid])2. data[right]=max(data[right],data[center],data[left])3. data[center]=median(data[left],data[right],data[center])4. 将data[center]放置在data[right-1] */    int median(vector<int> &data,int left,int right){        int center=(left+right)/2;        if(data[left]>data[center])           swap(data[left],data[center]);        if(data[left]>data[right])           swap(data[left],data[right]);        if(data[center]>data[right])           swap(data[center],data[right]);        swap(data[center],data[right-1]);        return data[right-1];     }   int partition(vector<int> &data,int left,int right){     int pivot=median(data,left,right);     int i=left,j=right-1;     while(1){            while(data[++i]<pivot){}//从data[left+1]            while(data[--j]>pivot){}//从data[right-2]            if(i<j)               swap(data[i],data[j]);            else               break;     }     swap(data[i],data[right-1]);     return i;   } /*快速选择算法*/ void quick_select(vector<int> &data,int k,int left,int right){    if(left<right){        int mid=partition(data,left,right);        if(k<mid)          quick_select(data,k,left,mid-1);        else if(k>mid)          quick_select(data,k,mid+1,right);        else          return ;    } }/*快速排序算法*/void quick_sort(vector<int> &data,int left,int right){    if(left<right){       int mid=partition(data,left,right);       quick_sort(data,left,mid-1);       quick_sort(data,mid+1,right);    }}int main(){    int d[]={1,2,3,2,2,2,5,4,2};    vector<int> data(d,d+9);    // quick_select(data,8,0,8);    //for(int i=0;i<9;++i)      //  cout<<data[i]<<" ";     quick_sort(data,0,8);    for(int i=0;i<9;++i)        cout<<data[i]<<" ";     return 0;}



0 0
原创粉丝点击