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