zoukankan      html  css  js  c++  java
  • 冒泡排序详解7-20

    //
    //  main.m
    //  Mypritice1
    //
    //  Created by laouhn on 15/7/18.
    //  Copyright (c) 2015年 池海涛. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
       /*
        int a[5] = {38,24,18,29,10};
        //冒泡排序
        int temp = 0;
        for (int i = 0; i < 5 - 1; i++) {
            for (int j = 0; j < 5 - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < 5; i++) {
            printf("%d ",a[i]);
        }
        */
        //冒泡排序详解
        /*
        1.冒泡排序的原理
         //38,24,18,29,10
         //两两比较,大的前移
         第一遍循环比较
         24,38,18,29,10
         24,18,38,29,10
         24,18,29,38,10
         24,18,29,10,38
         第二遍循环比较
         18,24,29,10,38
         18,24,29,10,38
         18,24,10,29,38
         第三遍循环比较
         18,24,10,29,38
         18,10,24,29,38
         第四遍循环比较
         10,18,24,29,38
         每一趟找出最大值
         */
        
        int a[5] = {38,24,18,29,10};
        int temp = 0;
        //第一趟的比较找出最大值,注意i < 5 - 1不能为i < 5 否则越界
        for (int i = 0;  i < 5 - 1; i++ ) {
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
        //第二趟比较
        for (int i = 0;  i < 5 - 1; i++ ) {
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
        //第三趟比较
        for (int i = 0;  i < 5 - 1; i++ ) {
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
        //第四趟比较
        for (int i = 0;  i < 5 - 1; i++ ) {
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
           //从上面可以看出没一趟的比较代码都是一样的
        //5个数排序,比较4趟,n个数排序比较n - 1趟,    //所以在for循环外加一个for循环,表示循环的趟数
        for (int j = 0; j < 5 -1; j++) {//循环了4趟
            for (int i = 0;  i < 5 - 1; i++ ) {//每趟比较了4次
                if (a[i] > a[i + 1]) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
        }
        //每一趟比较了4次,照成不必要的比较,第一趟比较4次,第二趟比较3次,第三趟比较2,第四趟比较1次
        //上面的代码照成了无用的循环
        for (int j = 0; j < 5 -1; j++) {//循环了4趟
            for (int i = 0;  i < 5 - 1 - j; i++ ) {//每趟比较了5 -1 -j次
                if (a[i] > a[i + 1]) {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    Qt 优雅的结束程序
    Qt QPainter实现按钮添加半透明图片
    Qt QTableModel联表显示
    C++ unique 里 类型为vector<vector<int>> 的比较函数
    用JavaScript实现的2048.
    Linux 脚本控制和计划任务
    Linux shell脚本分支循环函数笔记
    Linux shell脚本特殊符号笔记
    Linux shell脚本笔记
    Linux 内存磁盘管理命令笔记
  • 原文地址:https://www.cnblogs.com/wohaoxue/p/4656293.html
Copyright © 2011-2022 走看看