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循环后,让比基准数小的放他的左面,大的放右面;

然后让左面的和右面的在进行上述操作

posted @ 2024-04-05 08:54  -刘佳兴-  阅读(93)  评论(0编辑  收藏  举报