【插入排序】Insert_Sort
- 创业
- 2025-09-01 23:12:02

一、直接插入排序 void InsertSort(int *arr, int n) { int i, j, temp; for (i = 1; i < n; ++i) { if (arr[i] < arr[i - 1]) { temp = arr[i]; for (j = i - 1; j >= 0 && arr[j] > temp; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = temp; } } }
注意:第一个元素是有序的,从第二个元素开始,首先要判断这个元素要不要插入,如果这个元素比前面的有序序列中的元素都大,就不需要插入。
二、直接插入排序(哨兵) void InsertSort(int *arr, int n) { int i, j; for (i = 2; i < n; ++i) { if (arr[i] < arr[i - 1]) { arr[0] = arr[i]; for (j = i - 1; j >= 0 && arr[j] > arr[0]; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = arr[0]; } } } 三、折半插入排序 void BinsertSort(int *arr, int n) { for (int i = 1; i < n; ++i) { int low = 0, high = i - 1, temp = arr[i]; while (low <= high) { int mid = (low + high) / 2; if (temp < arr[mid]) { high = mid - 1; } else { low = mid + 1; } } for (int j = i - 1; j >= high + 1; j--) { arr[j + 1] = arr[j]; } arr[high + 1] = temp; } } 四、希尔排序 void ShellSort(int *arr, int n) { for (int d = n / 2; d >= 1; d /= 2) { for (int i = d; i < n; i++) { if (arr[i] < arr[i - d]) { int temp = arr[i]; int j; for (j = i - d; j >= 0 && arr[j] > temp; j -= d) { arr[j + d] = arr[j]; } arr[j + d] = temp; } } } }【插入排序】Insert_Sort由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【插入排序】Insert_Sort”
下一篇
解析JUC包底层源码实现