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

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

时间: 2024-08-07 21:19:31

选择排序(普通,加强版对比)的相关文章

第一部分:趣味算法入门;第八题:冒泡排序(并与选择排序对比)

100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门:第八题: 8.冒泡排序:对N个整数(数据由键盘输入)进行升序排序 冒泡排序的思想:首先从表头开始往后扫描数组,在扫描的过程中逐对比较相邻的俩个元素的大小.若相邻的两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,在扫描的过程中不断的将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,然后在剩下的数组元素中(n-1)个元素重复上面的

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

排序算法系列——直接选择排序

前面两篇介绍了两种插入排序算法:直接插入排序和希尔排序.这篇介绍选择排序的一种:直接选择排序.从名字就可以看出直接选择排序与直接插入排序很相似,两者相同点在与都是将待排序序列分成有序区和无序区两部分,不同之处在于直接插入排序是从无序区选出一个插入到有序区合适的位置,而直接选择排序是从无序区选出最小的一个插入到有序区尾部,使得有序区保持有序. 基本思想: 一组待排序的数据,首先将其划分成两部分,一部分是已排好序的,另一部分是待排序的,然后依次从待排序部分取出最小的元素插入到已排序部分的尾部,保证有

【Java SE】如何用Java实现直接选择排序

摘要:直接选择排序属于选择排序的一种,但是它的排序算法比冒泡排序的速度要快一些,由于它的算法比较简单,所以也比较适合初学者学习掌握. 适宜人群:有一定Java SE基础,明白Java的数据类型,数组的定义.初始化以及常用数组的方法,还有Java的循环操作. 前期准备:最好有一个开发工具比如说:eclipse或者myeclipse都可以,当然你使用DOS系统进行编译运行都可以,只不过改bug会麻烦一点. 排序原理:直接选择排序的原理是将指定排序位置与其他数组元分别对比,如果满足条件就交换位置的值,

冒泡排序、选择排序、插入排序、快速排序

冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次笔记两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行知道没有在需要的交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. data_set = [ 9,1,22,31,45,3,6,2,11 ] loop_count = 0 for j in range(len(data

java基础算法之选择排序

选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 时间复杂度  选择排序的交换操作介于 0 和 (n - 1) 次之间.选择排序的比较操作为 n (n - 1) / 2 次之间.选择排序的赋值操作介于 0 和 3 (n - 1) 次之间.比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(

算法 排序(二) 选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减

【Java_Base】常用排序算法:冒泡排序、选择排序、插入排序

冒泡排序比较相邻的元素.如果第一个比第二个大,就交换他们两个.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数.针对所有的元素重复以上的步骤,除了最后一个.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 选择排序对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变

【数据结构】选择排序算法示例

基本选择排序编辑 排序算法即解决以下问题的算法: 输入 n个数的序列<a1,a2,a3,...,an>. 输出 原序列的一个重排<a1*,a2*,a3*,...,an*>:,使得a1*<=a2*<=a3*<=...<=an* 排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等.插入排序,堆排序,选择排序,归并排序和快速排序,冒泡排序都是比较排序,它们通过对数组中的元素进行比较来实现排序,其他排序算法则是