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

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

posted on 2016-08-15 23:21  路之遥_其漫漫  阅读(270)  评论(0编辑  收藏  举报

导航