• 选择排序(普通,加强版对比)


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

  • 相关阅读:
    Object-C(自学1)
    在vue-cli@3.X中配置代理解决开发环境的跨域问题
    记一次发布/更新npm包的过程及包版本管理
    MAC OS上开启Nginx静态文件服务器
    vuecli3打包部署 非根目录下 配置vue.config.js publicPath
    使用Anywhere开启一个nodejs静态文件服务器
    搭建node服务端并使用express()创建简单数据接口,最后返回前端请求的所需数据
    对正反向代理对理解
    Mac查看Python安装路径和版本
    onBlur方法在iOS和Android平台上的差异
  • 原文地址:https://www.cnblogs.com/yyx1-1/p/5774750.html
Copyright © 2020-2023  润新知