c++排序大全(从小到大)
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int a[10]={3,6,1,5,4,8,7,10,9,2}; 5 for(int j=0;j<9;j++){ 6 for(int i=j+1;i<10;i++){ 7 if(a[j]>a[i]){ 8 swap(a[j],a[i]); 9 } 10 } 11 } 12 for(int i=0;i<10;i++){ 13 cout<<a[i]<<" "; 14 } 15 return 0; 16 }
冒泡排序 ↑
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int a[10]={90,6,1,5,4,8,7,10,9,2}; 5 int minn; 6 for(int j=0;j<10;j++){ 7 minn=j; 8 for(int i=j+1;i<10;i++){ 9 if(a[minn]>a[i]){ 10 minn=i; 11 } 12 } 13 swap(a[j],a[minn]); 14 } 15 for(int i=0;i<10;i++){ 16 cout<<a[i]<<" "; 17 } 18 return 0; 19 }
选择排序 ↑
思路:
把第一个看做已经排序好了,从剩下的找出最小的,和第一个做比较,如最小,则交换顺序,
然后第一个看做已经排序好了,从剩下的找出最小的,和第二个做比较,如最小,则交换顺序
.......一直到末尾
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int a[10]={10,9,8,7,6,5,4,3,2,1}; 5 for(int j=1;j<10;j++){ 6 for(int i=0;j-i>=0;i++){ 7 if(a[j-i]<a[j-i-1]){ 8 swap(a[j-i],a[j-i-1]); 9 }else{ 10 break; 11 } 12 } 13 } 14 for(int i=0;i<10;i++){ 15 cout<<a[i]<<" "; 16 } 17 return 0; 18 }
直接插入 ↑
思路:
先从第二个开始,和前一个进行比较,第二个小,则交换位置,如第二个大或比较到数组边缘,则break;
在从第三个开始,和前一个进行比较,第三个小,则交换位置,如第三个大或比较到数组边缘,则break;
.........一直到末尾
图片精讲:
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int main(){ 5 int a[10]={10,9,8,7,6,5,4,3,2,1}; 6 for(double i=10;i>1;){ 7 i=round(i/2); 8 for(int j=0;j+i<10;j++){ 9 if(a[j]>a[j+(int)i]){ 10 swap(a[j],a[j+(int)i]); 11 } 12 } 13 } 14 for(int i=0;i<10;i++){ 15 cout<<a[i]<<" "; 16 } 17 return 0; 18 }
希尔排序 ↑
思路:
//对一维数组中的十个数据进行从小到大排序:
//基本思想:是直接插入排序的进阶版本,
//将整个待排序元素序列分割成若干个子序列
//(由相隔某个“增量”的元素组成)分别进行直接插入排序,然后缩减增量在进行排序,
//待整个序列中的元素基本有序(增量足够小)时,在对全体元素进行一次直接插入排序。
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int n[]={10,9,8,7,6,5,4,3,2,1}; 5 void ks(int n[10],int i,int j){ 6 if(i<j){ 7 int p=i; 8 int l=i,r=j; 9 int m=n[p]; 10 while(l!=r){ 11 while((n[r]>=m)&&(l!=r)){ 12 r--; 13 } 14 while((n[l]<=m)&&(l!=r)){ 15 l++; 16 } 17 if(l<r){ 18 swap(n[l],n[r]); 19 } 20 } 21 swap(n[i],n[l]); 22 ks(n,i,l-1); 23 ks(n,l+1,j); 24 } 25 } 26 int main(){ 27 ks(n,0,9); 28 for(int i=0;i<10;i++){ 29 cout<<n[i]<<" "; 30 } 31 return 0; 32 }
↑快速排序
思路:
开始给定第一个基准数(第一个),经过一次while循环后,让比基准数小的放他的左面,大的放右面;
然后让左面的和右面的在进行上述操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报