1、基本概念
1、稳定排序:a == b,a本来在b前面,排序结束a仍然在b前面
2、非稳定排序:a==b,a原本在b前面,排序结束b在a前面
3、原地排序:排序过程中不申请新的空间
4、非原地排序:需要利用额外的数组来辅助排序
2、排序算法
1、选择排序
void Selectsort(int a[],int n) { int i; int j; int k; int min; int temp; for(i = 0;i < n;i++) { min = i; for(j = i + 1;j < n;j++) { if(a[min] > a[j]) { min = j; } } if(i != min) { temp = a[i]; a[i] = a[min]; a[min] = temp; } } } //时间复杂度:O(n的平方) //空间复杂度:O(1) //非稳定排序 //原地排序
2、插入排序
void Insertsort(int a[],int n) { int i; int j; int temp; int k; if(a == NULL || n < 2) { return ; } for(i = 0;i < n;i++) { temp = a[i]; k = i-1;//挨个往前找 //找到插入位置 while(k >= 0 && a[k] > temp) { k--; } //腾出位置插进去,要插的位置是k+1; for(j = i;j > k+1; j--) { a[j] = a[j-1]; } a[k+1] = temp; } } //时间复杂度O(n的平方) //空间复杂度:O(1) //稳定排序 //原地排序
3、冒泡排序
void Bubblesort(int a[],int n) { int i; int j; int temp; for(i = 0;i < n;i++) { for(j = 0;j < n-i-1;j++) { if(a[j+1] < a[j]) { temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; } } } } //时间复杂度O(n的平方) //空间复杂度O(1) //稳定排序 //原地排序 //优化,如果一次循环下来一次交换操作都没有,说明此时数组有序 void highBubblesort(int a[],int n) { int i; int j; int temp; int flag = 1; for(i = 0;i < n;i++) { for(j = 0;j < n-i-1;j++) { if(a[j+1] < a[j]) { flag = 0; temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; } } if(flag) { break; } } }
标签:temp,min,int,复杂度,++,排序 From: https://www.cnblogs.com/gunancheng/p/17473528.html