zoukankan      html  css  js  c++  java
  • 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]<<" ";
        }
     } 
  • 相关阅读:
    Docker界面化管理
    搭建MQTT服务器(Docker版)
    VS Code Markdown文件实时预览
    Nginx直接处理接口请求,返回相应内容(带html标签)
    Docker(九): 安装MySQL主从复制
    feign的一个注解居然隐藏这么多知识!
    使用Magisk指令修改 ro.debuggable(不刷机)
    【钓鱼可用】文件名反转字符串
    android高级UI之贝塞尔曲线<下>--贝塞尔曲线运用:QQ消息气泡
    英文阅读技巧操练---Article 1:The Product-Minded Software Engineer《一》
  • 原文地址:https://www.cnblogs.com/FXY-180/p/9664622.html
Copyright © 2011-2022 走看看