快速排序 及其改进

来源:互联网 发布:大势至usb软件 编辑:程序博客网 时间:2024/05/22 00:49
#include <iostream>using namespace std;void quicksort (int array[],int left,int right);//从小到大排序 int main(){int array[101];int num;cin>>num;for(int i=1;i<=num;i++)cin>>array[i];quicksort(array,1,num);cout<<"排序后:";for(int i=1;i<=num;i++)   cout<<array[i]<<" ";return 0; }   void quicksort (int array[101],int left,int right) { int i,j,temp,date;//temp为基准数    固定基准数为左端第一个元素。 if(left>right) return ;   i=left;  j=right;  temp=array[i];   while(i!=j) { while(array[j]>=temp&&i<j) j--; while(array[i]<=temp&&i<j) i++;    if(i<j)  {  date=array[i];  array[i]=array[j];  array[j]=date;  }  }   //将temp归位。  array[left]=array[i];  array[i]=temp;   quicksort(array,left,i-1);  quicksort(array,i+1,right); }
<pre name="code" class="cpp">
改进快排的核心函数;void quicksort (int array[],int left,int right);int PARTITION (int array[],int left,int right);//确定基准数。  void quicksort (int array[101],int left,int right) { int locate; if(left<right) {  locate=PARTITION(array,left,right); quicksort(array,left,locate-1); quicksort(array,locate+1,right); } } int PARTITION (int array[],int left,int right){int temp;int x=array[right];int i =left-1;int j=left;for(j;j<right;j++){if(array[j]<=x){i++;temp=array[i];array[i]=array[j];array[j]=temp;}}temp=array[i+1];array[i+1]=array[right];array[right]=temp;return i+1;}



0 0