一、快速排序
#include<iostream>
using namespace std;
//设定三个数组,判断排序算法代码的正确性
int a[100]={3,4,2,6,9,7,1,0,1,2,3,3,5,6,7,8,3,4,5};
int b[100]={1,5,3,4};
int c[100]={7,8,9,1,2,3};
void quickSort(int* num,int l,int r){
if(l>=r) return; //退出条件
int temp=num[l]; //num[l]为pivot
int i=l,j=r;
//找到左边第一个大于temp的,和右边第一个小于temp的元素,交换
while(i!=j){
while(i<j&&num[j]>=temp) j--;
while(i<j&&num[i]<=temp) i++;
if(i<j) swap(num[i],num[j]);
}
swap(num[i],num[l]);//将temp换到中间,此时左边都是小于temp的元素,右边都是大于temp的元素
quickSort(num,l,i-1); //对左边排序
quickSort(num,i+1,r); //对右边排序
}
int main(){
quickSort(a,0,18);
quickSort(b,0,3);
quickSort(c,0,5);
int i;
cout<<"a: ";
for(i=0;i<19;i++){
cout<<a[i]<<" ";
}
cout<<endl<<"b: ";
for(i=0;i<4;i++){
cout<<b[i]<<" ";
}
cout<<endl<<"c: ";
for(i=0;i<6;i++){
cout<<c[i]<<" ";
}
return 0;
}
运行结果:
a: 0 1 1 2 2 3 3 3 3 4 4 5 5 6 6 7 7 8 9
b: 1 3 4 5
c: 1 2 3 7 8 9
二、归并排序
#include<iostream>
using namespace std;
int n;
int num[100005];
void merge(int* a,int l,int mid,int r){
int temp[n];
int i=l,j=mid+1;
int cur=l;
while(i<=mid&&j<=r){
if(a[i]<a[j]) temp[cur++]=a[i++];
else temp[cur++]=a[j++];
}
while(i<=mid) temp[cur++]=a[i++];
while(j<=r) temp[cur++]=a[j++];
for(i=l;i<=r;i++){
a[i]=temp[i];
}
}
void mergeSort(int* a,int l,int r){
if(l==r) return;
int mid=(l+r)/2;
mergeSort(a,l,mid);
mergeSort(a,mid+1,r);
//合并
merge(a,l,mid,r);
}
int main(){
cin>>n;
int i;
for(i=0;i<n;i++){
cin>>num[i];
}
mergeSort(num,0,n-1);
for(i=0;i<n;i++){
cout<<num[i]<<" ";
}
return 0;
}
输入:
5
2 6 9 1 5
输出:
1 2 5 6 9