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 printFunc05(int* arr, int len)
     8 {
     9     for (int i = 0; i < len; i++)
    10         cout << arr[i] << " ";
    11     cout << endl;
    12 }
    13 
    14 //排序,从小到大
    15 void SelectSort05(int* arr, int len)
    16 {
    17     for (int i = 0; i < len - 1; i++)
    18     {  
    19         for (int j = i + 1; j < len; j++)      //要点1.
    20         {
    21             if (arr[i] > arr[j])           //要点2.
    22             {
    23                 int temp = arr[i];
    24                 arr[i] = arr[j];
    25                 arr[j] = temp;
    26             }
    27         }
    28     }
    29     cout << "普通的选择排序" << endl;
    30 }
    31 
    32 
    33 //创建数组
    34 void test05()
    35 {
    36     int arr[MAX];
    37     srand((unsigned int)time(NULL));
    38     for (int i = 0; i < MAX; i++)
    39     {
    40         arr[i] = rand() % MAX;
    41     }
    42     printFunc05(arr, MAX);
    43     //排序
    44     SelectSort05(arr, MAX);
    45     printFunc05(arr, MAX);
    46 
    47 }
    48 
    49 
    50 int main()
    51 {
    52 
    53     test05();
    54 
    55     system("pause");
    56     return EXIT_SUCCESS;
    57 }

    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 printFunc06(int* arr, int len)
     8 {
     9     for (int i = 0; i < len; i++)
    10         cout << arr[i] << " ";
    11     cout << endl;
    12 }
    13 
    14 //排序, 从小到大
    15 void SelectSort06(int* arr, int len)
    16 {
    17     for (int i = 0; i < len - 1; i++)
    18     {
    19         int max = i;                //要点1.
    20         for (int j = i + 1; j < len; j++)
    21         {
    22             if (arr[max] > arr[j])        //要点2.
    23             {
    24                 max = j;
    25             }
    26         }
    27 
    28         if (max != i)                //要点3.
    29         {
    30             int temp = arr[max];
    31             arr[max] = arr[i];
    32             arr[i] = temp;
    33         }
    34     }
    35     cout << "加强版选择排序" << endl;
    36 }
    37 
    38 //创建数组
    39 void test06()
    40 {
    41     int arr[MAX];
    42     srand((unsigned int)time(NULL));
    43     for (int i = 0; i < MAX; i++)
    44     {
    45         arr[i] = rand() % MAX;
    46     }
    47     printFunc06(arr, MAX);
    48     //排序
    49     SelectSort06(arr, MAX);
    50     printFunc06(arr, MAX);
    51 
    52 }
    53 
    54 int main()
    55 {
    56 
    57     test06();
    58 
    59     system("pause");
    60     return EXIT_SUCCESS;
    61 }

    两种方法的不同之处:(判断循环处进行的步骤不同, 增加了代码的运行效率)

    1.普通选择排序:

       每次判断,符合条件时都会进行数据的交换,多运行了几行代码,浪费时间

    2.加强版选择排序:

        1)每次判断时,符合条件时只会交换数据的下标, 少运行了代码

        2)只有当每次内层循环完毕时, 它才会进行数据的交换,减少了代码的运行。

    3.选择排序的特点:

      1)每次内层循环完毕:都会寻找到(最小或最大的元素, 将它放在元素的指定位置)

      2)如:第一次内层循环完毕,数据中(最大或最小的元素,一定会放在数据的开头或结尾(一般都是开头))。

  • 相关阅读:
    2019版:第七章:(1)Redis 持久化—RDB
    第三章:(2)高可用 之 集群下dubbo负载均衡配置
    2019版:第六章:(1)Redis 事务
    2019版:第七章:(3)Redis 持久化—RDB和AOF
    第二章:(7)Dubbo 配置与SpringBoot整合
    第二章:(6)Dubbo 常用配置之 本地存根
    2019版:第六章:(2)Redis 事务—秒杀案例
    2019版:第七章:(2)Redis 持久化—AOF
    敏捷开发修炼之道读书笔记2
    敏捷开发修炼之道读书笔记1
  • 原文地址:https://www.cnblogs.com/yyx1-1/p/5774750.html
Copyright © 2011-2022 走看看