几种常见的排序方法(C语言实现)
#include <stdio.h> #include <stdlib.h> #include <Windows.h> //直接插入排序 void InsertSort(int arry[], int n) { int i, j; int temp;//临时变量 for (i = 1; i < n; i++) { temp = arry[i]; for (j = i - 1; j >= 0; j--) { if (temp > arry[j]) break; else arry[j + 1] = arry[j]; } arry[j+1] = temp; } } //直接选择排序 void SelectSort(int arry[], int n) { int i, j; int temp; for (i = 0; i < n-1; i++) { temp = i; for (j = i + 1; j < n; j++) { if (arry[j] < arry[temp]) temp = j; } if(temp!=i) arry[temp] ^= arry[i] ^= arry[temp] ^= arry[i];//实现arry[temp]和arry[i]值交换 } } //冒泡排序 void BubbleSort(int arry[], int n) { int i, j, k; for (i = 0; i < n-1; i++) { for (j = i; j < n; j++) { if (arry[j - 1]>arry[j]) arry[j - 1] ^= arry[j] ^= arry[j - 1] ^= arry[j];//实现arry[temp]和arry[i]值交换 } } } //希尔排序第一类, void ShellSort1(int arry[], int n) { int i, j, k, gap,temp; for (gap = n / 2; gap > 0; gap /= 2) { for (k = 0; k < gap; k++)//同组先排 { for (i = k+gap; i < n; i += gap) { temp = arry[i]; for (j = i - gap; j >= 0; j -= gap) { if (temp > arry[j]) break; else arry[j + gap] = arry[j]; } arry[j + gap] = temp; } } } } //希尔排序第二类 void ShellSort2(int arry[], int n) { int i, j, k, gap, temp; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++)//所有组一起排序 { temp = arry[i]; for (j = i - gap; j >= 0; j -= gap) { if (temp > arry[j]) break; else arry[j + gap] = arry[j]; } arry[j + gap] = temp; } } } //希尔排序,利用gap分组后采用冒泡方式排序 void ShellSort3(int arry[], int n) { int i, j, k, gap, temp; for (gap = n / 2; gap > 0; gap /= 2) { for (k = 0; k < gap; k++) { for (i = k; i < n-gap; i += gap) { for (j = k+gap; j <n ; j += gap) { if (arry[j - gap]>arry[j]) arry[j - gap] ^= arry[j] ^= arry[j - gap] ^= arry[j]; } } } } } //快速排序,递归调用 void QuickSort(int arry[], int s,int t) { int i, j; if (s < t) { i = s; j = t+1; while (1) { do { i++; }while (!(arry[s] <= arry[i] || i >= t)); do { j--; } while (!(arry[s] >= arry[j] || j <= s)); if (i < j) arry[i] ^= arry[j] ^= arry[i] ^= arry[j]; else break; } if (arry[j]!= arry[s]) arry[j] ^= arry[s] ^= arry[j] ^= arry[s]; QuickSort(arry, s, j-1); QuickSort(arry, j + 1, t); } } int main() { int arry1[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41}; int arry2[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; int arry3[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; int arry4[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; int arry5[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; int arry6[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; int arry7[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 }; //七种方法任选一种,但效率有别 //一般情况下:快速排序>直接插入>直接选择==冒泡 //希尔排序看情况而定。一般优于直接选择排序 //InsertSort(arry1, 15); //SelectSort(arry2, 15); //BubbleSort(arry3, 15); //ShellSort1(arry4, 15); //ShellSort2(arry5, 15); //ShellSort2(arry6, 15); //QuickSort(arry7,0,14); int i = 0; for (i = 0; i < 15; i++) { printf("%d ", arry7[i]); } system("pause"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?