void insertsort(int a[],int len){
for(int i=1;i<len;i++){
int j=i-1;
int key=a[i];
while(j>=0 && a[j]>key){
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
};
冒泡排序是相鄰的兩個元素比較,像開水冒泡一樣,每輪把最大或最小的元素放到最後,一直到所有輪走完,時間複雜度爲O(n^2)
void bubblesort(int a[],int len){
for(int i=1;i<len;i++){
for(int j=0;j<len-i;j++){
if(a[j]>a[j+1]){
int tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
}
void selectsort(int a[],int len){
for(int i=0;i<len;i++){
int min=i;
for(int j=i;j<len;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
int tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
}
快速排序是找出一個元素作爲基準,然後對數組進行分區操作。使基準左邊的元素值都不大於基準值,基準右邊的元素都不小於基準值,最後基準元素調到排序後的正確位置。然後再把基準左邊和基準右邊的元素序列分別做以上操作。
void quicksort(int a[],int l,int r){
int i=l;
int j=r;
int key=a[i];
if(l<r){
while(i<j){
while(j>i && a[j]>key){
j--;
}
if(j>i){
a[i]=a[j];
i++;
}
while(i<j && a[i]<key){
i++;
}
if(j>i){
a[j]=a[i];
j--;
}
}
a[i] =key;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
}