湖北理工ca吧 关注:12贴子:55
  • 0回复贴,共1

快速排序算法

取消只看楼主收藏回复


#include <iostream>
using namespace std;
/*
* 快速排序:
* 一趟快速排序的算法是:
* 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
* 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
* 3)从j开始向前搜索,即由后开始向前搜索(j=j-1即j--),
* 找到第一个小于key的值A[j],A[i]与A[j]交换;
* 4)从i开始向后搜索,即由前开始向后搜索(i=i+1即i++),
* 找到第一个大于key的A[i],A[i]与A[j]交换;
* 5)重复第3、4、5步,直到 I=J;
* (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。
* 找到并交换的时候i, j指针位置不变。
* 另外当i=j这过程一定正好是i+或j-完成的最后令循环结束。)
*/
int main(){//主函数算法
void QuickSort(int a[]);
int a[10]={1,2,5,4,3,6,8,7,9,0};
cout<<"排序前:"<<endl;
for (int i=0;i<10;i++) {
cout<<a[i]<<" ";
}cout<<endl;
cout<<"------------------------------------------------"<<endl;
QuickSort(a);
cout<<"排序后:"<<endl;
for (int j=0;j<10;j++) {
cout<<a[j]<<" ";
}
cout<<endl;
getchar();
return 0;
}
void QuickSort(int a[]) {//快速排序母算法:
void quickSort(int a[],int i,int j);
quickSort(a,0,9);
}
void quickSort(int a[], int i, int j) {//快速排序子算法1:设置两个变量,i=0,j=9
int partition(int a[], int l, int r, int pivot);
void swap(int b[], int i, int j);
int pivotIndex = (i + j) / 2;//pivotIndex=4
swap(a, pivotIndex, j);//pivotIndex=9,j=4
int k = partition(a, i - 1, j, a[j]);//k=partition(a,i=-1,j=4,a[j]=a[4])
swap(a, k, j);//swap(a,k=0,j=4)---->k=4,j=0
if ((k - i) > 1) quickSort(a, i, k - 1);
if ((j - k) > 1) quickSort(a, k + 1, j);
}
int partition(int a[], int l, int r, int pivot) {//快速排序子算法2:k=partition(a,l=-1,r=4,pivot=a[4])
void swap(int b[], int i, int j);
do {
while (a[++l] < pivot); //a[l=0]<a[4] //a[l=4]<a[4]
while ((r != 0) && a[--r] > pivot);//4!=0且a[r=3]>a[4] //0=0且a[r=0]>a[4]
swap(a, l, r); //swap(a,l=0,r=3)
} while (l < r); //while(l=3 < r=0) //while(l=4 <r=0)
swap(a, l, r); //swap(a,l=4,r=0)-->l=0.r=4
return l;//l=0=k
}
void swap(int b[], int i, int j) {//互换函数算法
int temp = b[i];
b[i] = b[j];
b[j] = temp;
}


1楼2015-09-17 15:25回复