快速排序的基本思想是:
选中一个数作为基准,将待排序的数列分成两部分,从基准数开始,其左边的数都比该基准数小,其右边的数都比该基准数大,然后将左边和右边的数列同时进行递归排序,从而得到最终结果。
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;
}