C++ 排序方法

---恢复内容开始---

1.选择排序:
(1)基本思想:每一次都在所有的数字中选择最小的,将这个数字放在最前面,知道排序结束。

(2)排序过程:例子

初始:[49 38 65 97 76 13 27 49]

第一次排序:13 [38 65 97 76 49 37 49]

第二次排序:13 27 [65 97 76 49 38 49]

第三次排序:13 27 38 [97 76 49 65 49]

第四次排序:13 27 38 49 [97 76 65 49]

第五次排序:13 27 38 49 49 [97 76 65]

第六次排序:13 27 38 49 49 65 [97 76]

第七次排序:13 27 38 49 49 65 76 [97]

第八次排序:13 27 38 49 49 65 76 97

例题:输入n个数,将n个数从小到大按顺序输出
输入示例:

49 38 65 97 76 13 27 4

输出示例:

13 27 38 49 49 65 76 97

步骤:

1.读入数据,并将数据存放在a数组中。

2.按照选择排序的思想,实现上述操作。(不会的可以评论区问)。

3.直到n和n-1个数字排序的时候停止(排序后)。

代码:

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,sum,ans,k,t,a[100000];
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int j=1;j<=n;j++)
    {
        k=j;
        for(int i=j+1;i<=n;i++)
        {
            if(a[k]>a[i])k=i;
        }
        if(k!=j)
        {
            t=a[k];a[k]=a[j];a[j]=t;
        }
     } 
     for(int i=1;i<=n;i++)
     {
         cout<<a[i]<<" ";
     }
 } 

 

 

2.冒泡排序;

冒泡排序的思想与选择排序恰恰相反,其实只要掌握了两种排序中的一种,第二种也就通了。

思想:每一次,将现有的最大的一个人交换至最后一个,最后形成一个有序的队列。

例子:

加入有六个元素需要排序:

6 5 3 4 1 2

第一次排序:

6 5 3 4 1 2

5 6 3 4 1 2

5 3 6 4 1 2

5 3 4 6 1 2

5 3 4 1 6 2

5 3 4 1 2 6

第二次排序:

5 3 4 1 2 6

3 5 4 1 2 6

3 4 5 1 2 6

3 4 1 5 2 6

3 4 1 2 5 6

第三次排序;

3 4 1 2 5 6

3 1 4 2 5 6

3 1 2 4 5 6

第四次排序

1 3 2 4 5 6

1 2 3 4 5 6

第五次排序:

1 2 3 4 5 6

详细有图片;

 

 

程序:


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j;
    int t,a[100000];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=n-1;i>=1;i--)
    {
        for(int j=0;j<i;j++)
        {
            if(a[j]>a[j+1])
            swap(a[j],a[j+1]);
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
 } 
posted @ 2018-09-17 20:21  FXY_ssf  阅读(459)  评论(0编辑  收藏  举报