排序的详细分类
排序分为外部排序和内部排序,其中平时主要学习的是内部排序。
内部排序主要分为5大类:(ps:其中计数排序一般不做分析)
- 插入排序:
- 直接插入排序:每次处理就是将无序的数列中第一个元素与有序数列的元素从后到前比较,找到插入位置,将该元素插入到有序数列的适当的最终的位置上(稳定排序)。
算法过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /*直接插入排序*/ #include<stdio.h> void insertSort( int arr[], int length); int main() { int a[5] = { 5,2,3,4,1 }; insertSort(a, 5); for ( int i = 0; i < 5; i++) printf( "%5d" , a[i]); } void insertSort( int arr[], int length) { int i, j, k; for (i = 1; i < length; i++) { if (arr[i] < arr[i - 1]) { k = arr[i]; for (j = i - 1; arr[j] > k && j >= 0; j--) { //待插元素小于当前元素 arr[j + 1] = arr[j]; } arr[j + 1] = k; } } } |
2.折半插入排序
算法过程
/*折半插入排序: 将一个新元素插入打已经拍好像的数组的过程,mid=(low+high)/2, 判断插入元素是否小于参考元素,若是则选择low-high(high=mid-1)为插入区间, 反之则选择low(low=mid+1)-high,直到low>high时,即将此位置之后所有元素后移一位,并将新元素插入a[high+1]*/ #include<stdio.h> int main() { void BinSort(int a[], int n); void put(int r[], int n); int arr[] = { 9,8,7,6,5,4,3,2,1 }; BinSort(arr, 9); put(arr, 9); } void BinSort(int a[], int n) { int i, j, high,low, mid,t; for (i = 1; i < n; i++) { low = 0; high = i - 1; t = a[i]; while (low<=high) { mid = (low + high) / 2; if (t < a[mid]) { high = mid - 1; } else { low = mid + 1; } } for (j = i - 1; j >=high+1; j--) {//high+1的元素后移 a[j + 1] = a[j]; } a[j + 1] = t;//插入选定的地点 } }
脚踏实地,注重基础。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)