voidInsertsort(int* a,int n)//插入排序{for(int i =0; i < n -1; i++){int end = i;int tmp = a[end +1];while(end >=0){if(tmp < a[end]){
a[end +1]= a[end];
end--;}else{break;}
a[end +1]= tmp;}}}
2.希尔排序
voidShellsort(int* a,int n)//希尔排序{int gap = n;while(gap >1){
gap = gap /3+1;for(int i =0; i < n - gap; i++){int end = i;int tmp = a[end + gap];while(end >=0){if(tmp < a[end]){
a[end + gap]= a[end];
end -= gap;}else{break;}
a[end + gap]= tmp;}}}}
3.直接选择排序
voidSelectsort(int* a,int n)//直接选择排序{int start =0;int end = n -1;while(start < end){int min = start;int max = end;for(int i = start; i <= end; i++){if(a[i]>= a[max]){
max = i;}if(a[i]<= a[min]){
min = i;}}Swap(&a[min],&a[start]);if(max == start){
max = min;}Swap(&a[max],&a[end]);
end--; start++;}}
4.堆排序
voidAdJustdown(int* a,int size,int root)//向下调整算法{int parent = root;int child =2* parent +1;while(child < size){if(a[child]< a[child +1]&& child +1< size){++child;}if(a[parent]< a[child]){Swap(&a[parent],&a[child]);
parent = child;
child =2* parent +1;}else{break;}}}voidHeapsort(int* a,int n)//堆排序{for(int i =(n -2)/2; i >=0; i--){AdJustdown(a, n, i);}int end = n -1;while(end >0){Swap(&a[0],&a[end]);AdJustdown(a, end,0);
end--;}}
5.快速排序(左右指针法)
intPartsort(int* a,int begin,int end)//左右指针法{int key = begin;while(begin < end){while(begin < end && a[end]>= a[key]){--end;}while(begin < end && a[begin]<= a[key]){++begin;}Swap(&a[begin],&a[end]);}Swap(&a[key],&a[end]);return begin;}voidQuicksort1(int* a,int begin,int end)//递归{if(end <= begin){return;}int index =Partsort(a, begin, end);Quicksort(a, begin, index -1);Quicksort(a, index +1, end);}
6.快速排序(挖坑法)
intPartsort(int* a,int begin,int end)//挖坑法{int mid =GetMidIndex(a, begin, end);Swap(&a[mid],&a[begin]);int key = a[begin];while(begin < end){while(begin < end && a[end]>= key){--end;}
a[begin]= a[end];while(begin < end && a[begin]<= key){++begin;}
a[end]= a[begin];}
a[begin]= key;return begin;}voidQuicksort(int* a,int begin,int end){if(end <= begin){return;}int index =Partsort(a, begin, end);Quicksort(a, begin, index -1);Quicksort(a, index +1, end);}
7.快速排序(前后指针法)
intPartsort(int* a,int begin,int end)//前后指针法{int key = begin;int cur = begin +1;int pre = begin;while(cur <= end){if(a[cur]<= a[key]&&++pre != cur){Swap(&a[cur],&a[pre]);}++cur;}Swap(&a[key],&a[pre]);return pre;}voidQuicksort(int* a,int begin,int end){if(end <= begin){return;}int index =Partsort(a, begin, end);Quicksort(a, begin, index -1);Quicksort(a, index +1, end);}
8.快速排序(非递归)
intPartsort(int* a,int begin,int end){int key = begin;int cur = begin +1;int pre = begin;while(cur <= end){if(a[cur]<= a[key]&&++pre != cur){Swap(&a[cur],&a[pre]);}++cur;}Swap(&a[key],&a[pre]);return pre;}voidQuicksort2(int* a,int begin,int end)//非递归{
Stack st;//博主前一次博客附带栈的实现StackInit(&st);StackPush(&st, end);StackPush(&st, begin);while(StackEmpty(&st)){int left =StackTop(&st);StackPop(&st);int right =StackTop(&st);StackPop(&st);int index =Partsort(a, left, right);if(index +1< right){StackPush(&st, right);StackPush(&st, index +1);}if(index -1> left){StackPush(&st, index -1);StackPush(&st, left);}}}
9.冒泡排序
voidBubbleSort(int* a,int n){for(int i =0; i < n -1; i++){int flag =0;for(int j =0; j < n -1- i; j++){if(a[j]> a[j +1]){
flag =1;Swap(&a[j],&a[j+1]);}}if(flag ==0){break;}}}
voidCountSort(int* a,int n)//计数排序{int max = a[0];int min = a[0];for(int i =0; i < n; i++){if(a[i]> max){
max = a[i];}if(a[i]< min){
min = a[i];}}int range = max - min +1;int* ans =(int*)malloc(sizeof(int)*range);memset(ans,0,sizeof(int)*range);//把数组中的数字全部设置为0for(int j =0; j < n; j++){
ans[a[j]- min]++;}int index =0;for(int k =0; k < range; k++){while(ans[k]--){
a[index++]= k + min;}}}
1.插入排序void Insertsort(int* a, int n)//插入排序{ for (int i = 0; i &amp;amp;amp;lt; n - 1; i++) { int end = i; int tmp = a[end + 1]; while (end &amp;amp;amp;gt;= 0) { if (tmp &amp;amp;amp;lt; a[end]) { a[end + 1] = a