zoukankan      html  css  js  c++  java
  • C++经典排序算法的理解:冒泡排序和选择排序

    引言:自己在学习C++的过程中,对于非常经典的两种排序算法有时候会突然卡住,可能是因为一起学的,所以用起来老是会记混,脑袋中会有奇妙的记忆组合,比如:选择排序是不是得安排辅助变量的那个?选择排序的内层循环边界n是不是得减来着,后来发现这些问题的原因可能是没有理解这两种排序算法的实质,不管名字如何,他们终究是辅助我们理解记忆的,如果强行按照名字而理解的话,那反而是舍本逐末了,所以今天就把这两种算法按照自己的理解和记忆写下来,方便日后回忆梳理。

    #include<iostream>
    using namespace std;
    int main()
    {
        int n = 0;
        cout << "请输入需要排序数组的大小" << endl;
        cin >> n;
        int* a = new int[n];
        cout << "请输入需要排序的数组" << endl;
        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        cout << "选择排序如下:" << endl;
        //选择排序算法:在指定的位置上选择一个足够小的数,选完后继续往下进行。外圈固定
    //选择排序的特点是外圈i和内圈j相比较,为外圈的i挑选一个合适的数。 for (int i = 0; i < n; i++) //降序 { for (int j = i + 1; j < n; j++) { if (a[i] < a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (int i = 0; i < n; i++) cout << a[i] << " "; cout << "冒泡排序的结果如下" << endl; //冒泡排序,通过把前面小的(大的)往后挪,达到冒泡的效果,内圈移动
    //因为是相邻顶点两个比较,完了后再比较后面的相邻两个量,所以一组数都可以比较一遍,因而也就可以配合一个标志量来反映比较的结果是否符合排序期望,符合的话就直接跳出循环。
    //冒泡排序重在内圈循环中前后两个元素的比较,把内圈一次循环中的最值移到端点处
    for (int i = 1; i < n; i++) //升序 { int h = 1; for (int j = 0; j < n-i; j++) { if (a[j] > a[j +1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; h = 0;//辅助变量 } } if (h) { break; } } for (int i = 0; i < n; i++) cout << a[i] << " "; return 0; }
  • 相关阅读:
    kicad 基本操作
    RedHat centos中的上传下推脚本
    使用Node.js爬虫存储MySQL数据库
    解决vue和vue-template-compiler版本不同报错的问题
    Vue组件通信(父子组件通信)-学习笔记
    git 简单操作
    错误解决:redis.exceptions.ResponseError: unknown command 'SENTINEL'
    nginx做泛域名解析的域名的正则判断
    postman对字符串进行base64编码方法和变量的使用
    pymysql报错OperationalError: (2013, 'Lost connection to MySQL server during query')
  • 原文地址:https://www.cnblogs.com/honor260/p/14040208.html
Copyright © 2011-2022 走看看