zoukankan      html  css  js  c++  java
  • 冒泡排序(普通,加强对比)

    1.普通的冒泡排序

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<iostream>
     3 #include<time.h>
     4 using namespace std;
     5 #define MAX 20
     6 //打印数组
     7 void printFunc(int* arr, int len)
     8 {
     9     for (int i = 0; i < len; i++)
    10         cout << arr[i] << " ";
    11     cout << endl;
    12 }
    13 //排序
    14 void Popsort(int* arr, int len)
    15 {
    16     //从小到大
    17     for (int i = 0; i < len-1; i++)            //要点1.
    18     {
    19         for (int j = 0; j < len - i - 1; j++)      //要点2.
    20         {
    21             if (arr[j] > arr[j + 1])           //要点3.
    22             {
    23                 int temp = arr[j];
    24                 arr[j] = arr[j+1];
    25                 arr[j + 1] = temp;
    26             }
    27         }
    28     }
    29 
    30 }
    31 //创建数组
    32 void test03()
    33 {
    34     int arr[MAX];
    35     srand((unsigned int)time(NULL));
    36     for (int i = 0; i < MAX; i++)
    37     {
    38         arr[i] = rand() % MAX;
    39     }
    40     printFunc(arr, MAX);
    41     //排序
    42     Popsort(arr, MAX);
    43     printFunc(arr, MAX);
    44 
    45 }
    46 
    47 
    48 int main03()
    49 {
    50 
    51     test03();
    52 
    53     system("pause");
    54     return EXIT_SUCCESS;
    55 }

    2.加强版冒泡排序

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<iostream>
     3 #include<time.h>
     4 using namespace std;
     5 #define MAX 20
     6 //打印数组
     7 void printFunc04(int* arr, int len)
     8 {
     9     for (int i = 0; i < len; i++)
    10         cout << arr[i] << " ";
    11     cout << endl;
    12 }
    13 //排序
    14 void Popsort04(int* arr, int len)
    15 {
    16     bool flag = true;            // 要点1.
    17     for (int i = 0; i < len - 1 && flag; i++)
    18     {
    19         flag = false;            // 要点2.
    20         for (int j = 0; j < len - 1 - i; j++)
    21         {
    22             if (arr[j] > arr[j + 1])    //要点3.
    23             {
    24                 flag = true;
    25                 int temp = arr[j];
    26                 arr[j] = arr[j + 1];
    27                 arr[j + 1] = temp;
    28             }
    29         }
    30     }
    31     cout << "新冒泡" << endl;
    32 }
    33 
    34 
    35 //创建数组
    36 void test04()
    37 {
    38     int arr[MAX];
    39     srand((unsigned int)time(NULL));
    40     for (int i = 0; i < MAX; i++)
    41     {
    42         arr[i] = rand() % MAX;
    43     }
    44     printFunc04(arr, MAX);
    45     //排序
    46     Popsort04(arr, MAX);
    47     printFunc04(arr, MAX);
    48 
    49 }
    50 int main()
    51 {
    52 
    53     test04();
    54 
    55     system("pause");
    56     return EXIT_SUCCESS;
    57 }

    //这两种方法的不同之处在于:(进行排序的次数会不同)

    1.普通冒泡: 即使数据是有序的,或排序过程中(还没有进行完,已经有序),但是剩下的排序步骤它还会进行,浪费时间。

    2.加强版冒泡:增加了一个标示量(flag);一旦当数组有序后,标示量就变为 false,不会在进行下面的循环,节省了循环次数。

    加强版:详细理解(参照上面代码:)

      1)标示量 flag 初始值为 true, 他会进入外层循环,然后就给他赋值为 false;

      2)当在内层循环时,如果此时数据有序,就不会进入 if()判断语句;标示量就不会发生变化, 还为false, 下一次外层循环就不会进入,减少了循环次数

      3)如果此时数据无序, 在内层循环时, 会进入if()判断语句,标示量 发生变化,为 true, 下一次外层循环还会进入, 直至 false为 true 或者 全部循环完毕(此时false肯定也为true了, 因为已经排序完, 数据一定有序了)。

    3.冒泡循环的特点:

      1.)每次内层循环完毕,都会把数据中(最大或最小)的元素放到指定的位置

      2.)如第一次内层循环完毕,数据中(最大或最小) 的元素肯定实在数据的开头或结尾(一般是开头,因为大部分人都是从开头进行循环的)。

  • 相关阅读:
    正则式记录
    限制键盘只能按数字键、小键盘数字键、退格键
    windows服务安装记录
    CheckBox使用记录
    you need to be root to perform this command
    Code First 更新数据库 记录
    EF查询记录
    sqlserver数据库存储汉字出现?
    【转】THE ROAD TO SUCCESS--听ERIC XING讲课记录
    Nice Computer Vision package collections
  • 原文地址:https://www.cnblogs.com/yyx1-1/p/5774676.html
Copyright © 2011-2022 走看看