快速排序与归并排序

来源:互联网 发布:灰色关联分析软件 编辑:程序博客网 时间:2024/06/05 21:09

快速排序的基本思想是:

选中一个数作为基准,将待排序的数列分成两部分,从基准数开始,其左边的数都比该基准数小,其右边的数都比该基准数大,然后将左边和右边的数列同时进行递归排序,从而得到最终结果。

C++的代码实现如下:

<pre name="code" class="cpp"><pre name="code" class="cpp">#include <iostream>using namespace std; void quickSort(int[],int,int ); int partition(int[],int,int); int main(){    int n;    cin>>n;    int *a=new int[n];    int i;    for(i=0;i<n;i++){        cin>>a[i];    }    quickSort(a,0,n-1);    for(i=0;i<n;i++){       cout<<a[i]<<endl;    }    return 0; } void quickSort(int a[],int left,int right){    int i;    if(left<right){        i=partition(a,left,right);        quickSort(a,left,i);        quickSort(a,i+1,right);    } }int partition(int a[],int left,int right){    int pivots=a [left];    while(left<right){        while(left<right&&a[right]>=pivots){            right--;        }        if(left<right){            a[left]=a[right];            left++;        }        while(left<right&&a[left]<=pivots){            left++;        }        if(left<right){            a[right]=a[left];            right--;        }    }    a[left]=pivots;    return left;}


归并排序:

归并排序的基本思想是假设一个序列的两个子序列已经排好序,只需要将这两个序列归并为一个序列就可以,是一种比较典型的递归排序方式。

c++代码实现如下:

#include <iostream>void merge(int[],int,int,int);void mergeSort(int[],int,int);int main(){    int n;    cin>>n;    int* a=new int[n];    int i;    for(i=0;i<n;i++){        cin>>a[i];    }    mergeSort(a,0,n-1);    for(i=0;i<n;i++){        cout<<a[i]<<endl;    }    delete[] a;    return 0;}void mergeSort(int a[],int left,int right){    if(left<right){        int middle=(left+right)/2;        mergeSort(a,left,middle);        mergeSort(a,middle+1,right);        merge(a,left,middle,right);    }}void merge(int a[],int left,int middle,int right){   int *c=new int[right-left+1];   int i=left;   int j=middle+1;   int k=0;   while(i<=middle&&j<=right){       if(a[i]<=a[j]){          c[k]=a[i];          i++;          k++;       }      else{          c[k]=a[j];          k++;          j++;       }   }   while(i<=middle){       c[k]=a[i];       k++;       i++;   }   while(j<=right){    c[k]=a[j];    k++;    j++;   }   for(int m=left,t=0;m<=right;m++,t++){     a[m]=c[t];   }  delete[] c;}


0 0
原创粉丝点击