选择排序之C++实现

一、源代码:SelectSort.cpp

 1 /*
 2 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;
 3 然后,选出第二小的数,放在第二个位置;
 4 以此类推,直到所有的数从小到大排序。
 5 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。
 6 */
 7 #include<iostream>
 8 using namespace std;
 9 /*定义输出一维数组的函数*/
10 void print(int array[], int n)
11 {
12     for (int i = 0; i < n; i++)
13     {
14         cout << array[i] << " ";
15     }
16     cout << endl;
17 }
18
19 int selectSort(int array[], int n)
20 {
21     //定义变量,记录交换次数
22     int count = 0;
23     //假设最小值所在的位置,默认为0,即第一个元素
24     int min_index = 0;
25     //定义中间变量,存储临时数据
26     int temp;
27     //遍历数组(进行排序)
28     cout << "开始对数组进行排序了..." << endl;
29     for (int i = 0; i < n - 1; i++)
30     {
31         //假设当前的元素是第i小的元素,保存当前位置
32         min_index = i;
33         for (int j = i + 1; j < n; j++)
34         {
35             cout << "第" << (i + 1) << "趟第" << (j + 1) << "次排序" << endl;
36             //判断当前的元素是否小于假设的第i小元素
37             if (array[min_index]>array[j])
38             {
39                 //重新设置第i小的元素位置
40                 min_index = j;
41             }
42         }
43         //判断当前位置的元素是否等于假设的第i小元素,如果不等于则交换这两个元素
44         if (min_index != i)
45         {
46             temp = array[min_index];
47             array[min_index] = array[i];
48             array[i] = temp;
49             cout << array[min_index] << "和" << array[i] << "互换了" << endl;
50             //输出此时数组的顺序
51             cout << "数组此时的顺序是:";
52             print(array, 10);
53             //每交换一次,记录数加1
54             count++;
55         }
56     }
57     cout << "数组排序结束了..." << endl;
58     return count;
59 }
60
61 int main()
62 {
63     //定义待排序的一维数组
64     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
65     //输出原始数组
66     cout << "原始数组是:" << endl;
67     print(array, 10);
68     //对数组进行排序
69     int count = selectSort(array, 10);
70     //输出排序后的数组
71     cout << "排序后的数组是:" << endl;
72     print(array, 10);
73     cout << "共交换" << count << "次" << endl;
74     return 0;
75 }

二、运行效果

转载于:https://www.cnblogs.com/zfc-java/p/7390831.html

选择排序之C++实现相关推荐

  1. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  2. 交换排序图解_图解简单选择排序

    简单选择排序 有如下数组,我们需要对它从小到大排序,步骤如下: 在数组中找到最小值,然后与第一个位置交换. 除去第一个位置在数组中继续找最小值,与第二个位置交换,以此类推,直到末尾. 下图展示了整个交 ...

  3. 经典算法学习——直接选择排序

    直接选择排序和直接插入排序相似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区.而直接选择排序是从无序区选一个最小的元素直接放到有序区的 ...

  4. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  5. 8)排序②排序算法之选择排序[1]直接选择排序

    1 #include<iostream> 2 using namespace std; 3 4 //*******直接选择排序********* 5 int select_sort(int ...

  6. 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序

    1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...

  7. 【算法导论】冒泡排序 选择排序

    冒泡排序: //从大到小 void bubble_sort(int array[],int len) {int i,j,t;for(i=0;i<len-1;i++){for(j=0;j<l ...

  8. 链表问题16——单链表的选择排序(python版本)

    题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...

  9. 链表问题16——单链表的选择排序

    题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...

  10. 【Java常识】7.0 数组实现冒泡排序、选择排序和二分查找

    1.0 冒泡排序原理 冒泡排序就是:轻的上浮,沉的下降.小的往前排,大的往后走. 原理:若一个N个元素的数组,两个相邻位置比较,如果前面的元素比后面的元素大就换位置. 每一次比较,都是相对最沉的到位. ...

最新文章

  1. 玉米田Corn Fields
  2. System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
  3. mybatis-plus分页查询_SpringBoot + MyBatisPlus 快速入门
  4. vue 写bean_vue+jsp+删除一个bean
  5. [转载] 6.3 cmath--数学函数
  6. .Net----Remoting 激活 激活方式
  7. Unity 动态更改鼠标样式
  8. 【软件测试】测试人终将迎来末路?测试人的我35岁就坐等失业?
  9. egret 里面设置MovieClip的scale缩放值时,没有效果的情况
  10. 智能名片为什么使用场景都是微信小程序?哪些新玩法值得一试?
  11. Js 根据经纬度坐标计算方位角
  12. Winform的内容
  13. 记一次内网jenkins自动发布血泪史
  14. 概率与数理统计——中心极限定律
  15. 爬虫——网站模拟登录
  16. 利用freemarker模板导出复杂excel可带图片
  17. PHP 根据QQ号获取QQ头像和昵称
  18. excel表格按行随机抽取数据
  19. vty 、console 、三种模式、enable密码配置
  20. Modbus-TCP协议说明

热门文章

  1. 12.MongoDB之固定集合(Capped Collections)
  2. python discuz验证码_Python3简单验证码识别
  3. java jlabel位置_Java Swing – JLabel位置
  4. d触发器q端的输出波形_如果把D触发器的输出Q'反馈连接到输入D,则输出Q的脉冲波形的频率为CP脉冲频率f的 。...
  5. 【渝粤教育】国家开放大学2019年春季 2321物流学概论 参考试题
  6. ubuntu14.04中卸载cuda、cudnn
  7. Java编程中组合、继承和代理的区别
  8. 解决Docker for window与VMware虚拟机同时安装,造成虚拟机网络不通以及无法启动问题...
  9. WPF TextBox提示文字设定
  10. 使用 PHP Curl 做数据中转