选择排序:每次挑第i小的放第i位。
int* select(int* a,int n){
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[i]>a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
return a;
}
冒泡排序:每次挑第i大的放最后第i位(大数后置)。
int* bubble(int* a,int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
return a;
}
插入排序:打牌。
int *insert(int* a,int n){
int *b=new int[n];
b[0]=a[0];
for(int i=1;i<n;i++){
if(a[i]>=b[i-1])
b[i]=a[i];
else{
int m=i-2;
while((m>=0)&&(a[i]<b[m])){
m--; //注意考虑m越出左边的情况
}
for(int j=i;j>m+1;j--)
b[j]=b[j-1];
b[m+1]=a[i];
}
}
return b;
delete[]b;
}
数值交换:
void swap(int &a,int&b){
int temp=a;
a=b;
b=temp;
}
快速排序:左小右大,j记录遇到的小值数,大数交换置前。
void quick(int *a,int start,int end){
if(end<=start) return;
int key=a[start];
int j=start;
for(int i=start;i<=end;i++){
if(a[i]<key){
++j;
swap(a[i],a[j]);
}
}
swap(a[start],a[j]);
quick(a,start,j-1);
quick(a,j+1,end);
}