• 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; }
  • 相关阅读:
    Android实现App版本自动更新
    Android EditText+ListPopupWindow实现可编辑的下拉列表
    Android 侧滑面板的实现(DragLayout)
    android之SlideMenu双向滑动
    Android 从无到有打造一个炫酷的进度条效果
    Android 自定义View修炼-仿360手机卫士波浪球进度的实现
    TabLayout禁止选择
    Metasploit的攻击实例讲解----ms10_046快捷方式图标漏洞
    PowerDesigner 16.5的下载安装破解注册(图文详解)
    Metasploit的armitage初步使用
  • 原文地址:https://www.cnblogs.com/honor260/p/14040208.html
Copyright © 2020-2023  润新知