经典的冒泡:
void sort(int a[],int n){
bool swapped;
do{
swapped=false;
for(int i=1;i<n;i++){
if(a[i-1]>a[i]){
swap(a[i-1],a[i]);
swapped=true;
}
}
}while(swapped);
}
//本着每趟都能把最大数找出来放到最后的原则,依次找到最大,次大,。。
插入法:
void sort(int a[],int n){
int i,j;
for(i=1;i<n;i++){
int t=a[i];
for(j=i;j>0&&j[i-1]>t;j--){
a[j]==a[j-1];
}
a[j] = t;
}
}
//从i=0开始,依次把这前i+1个数排好,本着来一个插一个的原则
选择法:
void sort(int a[],int n){
for(int i=1;i<n;i++){
int min=i-1;
int mv = a[min];
for(int j=i;j<n;j++){
if(a[j]<mv){
min = j;
mv = a[j];
}
}
a[min]=a[i-1];
a[i-1] = mv;
}
}
//从第2-n个中找到比第一个数小的最小值,进行交换
//依次,从第3-n个中找到比第二个数小的最小值,进行交换
//。。。
快排:
void sort(int a[],in n){
if(n<=1) return ;
if(n==2){
if(a[0]>a[1])
swap(a[0],a[1]);return;
}
swap(a[n/2],a[0]);
int pivot = a[0];
int *L = a+1;
int *R = a+n-1;
while(L<R){
while(L<R && *L<pivot) ++L;
while(a<R && *R>=pivot) ++R;
if(L<R) swap(*L,*R);
}
swap(a[0],*R);
sort(a,R-a);
sort(R+1,n-(R-a)-1);
}
//递归的美妙之处。