voidInsertSort(int arr[],int n){for(int i =0; i < n; i++){if(arr[i]< arr[i-1]){int cur = arr[i];int j = i -1;for(; cur < arr[j]; j--){
arr[j+1]= arr[j];}
arr[j+1]= cur;//注意要加一}}}
2.希尔排序
//希尔排序直接在插入排序上改进//对记录数少,基本有序的高效voidShellSort(int arr[],int n){for(int grp = n /2; grp >0; grp >>=1){for(int i = grp; i < n; i++){if(arr[i]< arr[i - grp]){int cur = arr[i];int j = i - grp;for(; cur < arr[j]; j -= grp){
arr[j + grp]= arr[j];}
arr[j + grp]= cur;}}}}
测试用例
voidmain(){int arr[100];int n =10;srand(int(time(0)));for(int i =0; i < n; i++){
arr[i]=rand()%1000;
std::cout << arr[i]<<" ";}
std::cout <<" "<< std::endl;ShellSort(arr, n);for(int i =0; i < n; i++)
std::cout << arr[i]<<" ";}
排序名称时间复杂度空间复杂度稳定性直接插入排序O(n^2)O(1)稳定希尔排序O(nlog2n)O(1)不稳定1. 直接插入排序void InsertSort(int arr[], int n) { for (int i = 0; i < n; i++) { if (arr[i] < arr[i-1]){ int cur = arr[i]; int j = i - 1; for (; cur < arr[j]; j...