快速排序

来源:互联网 发布:决策支持软件 编辑:程序博客网 时间:2024/06/06 13:58

快速排序的基本思想:
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这俩部分记录继续进行排序,已达到整个序列有序的目的。
代码:

void Quick_Sort(vector<int> &v, int first,int end){    if(first<end)    {        int key = v[first];        int i = first;        int j = end;        while(i<j)        {            while(i<j&&v[j]>=key)                j--;            if(i<j)                v[i]=v[j];            while(i<j&&v[i]<key)                i++;                if(i<j)                    v[j]=v[i];        }        v[i] = key;        Quick_Sort(v,first,i-1);        Quick_Sort(v,i+1,end);    }}

代码2

int Partition(int data[],int length,int start,int end){    int pivot = data[end];    int curpos = start;    for(int index =start;index<end;index++)    {        if(data[index]<pivot)        {            swap(data[index],data[curpos]);            curpos++;        }    }    swap(data[curpos],data[end]);    return curpos;}void Quick_Sort(int data[],int length,int start,int end){    if(start>=end)    return ;    int index = Partiton(data,length,start,end);    if(start<index)    Quick_Sort(data,length,start,index-1);    if(index<end)    Quick_Sort(data,length,index+1,end);}

代码3 改进版

void Quick_Sort2(int data[], int length, int start, int end)  {      if (start >= end)          return;      int key = data[start];      int i = start, j = end+1;      while (1)      {          do{              i++;          } while (i <= end && data[i] < key);          do{              j--;          } while (data[j] > key);          if (i > j)              break;          swap(data[i],data[j]);      }      swap(data[start], data[end]);      Quick_Sort2(data, length, start, j - 1);      Quick_Sort2(data, length, j + 1, end);  }