米游社 · 大别野

C++教学(18)排序

来自版块: 科技
6
10
0
文章发表:2023-01-17
来自合集: C++教学

补之前的坑

主要内容:

1,选择排序

2,冒泡排序

3,插入排序


数值排序

输入n个数,将n个数从小到大的顺序输出。

输入样例:

6

195 156 305 293 253.1 114

输出样例:

114 156 195 253.1 293 305


1,选择排序

如果要对n个数实现排序,需要用到数组。我们需要使用循环,第一次,选择最小的数与a[0]交换位置,第二次,就不需要去管a[0],在a[1]到a[n]中选择最小的数与a[1]交换位置……经历n-1次选择,原队列就成为了有序的队列,这样的排序方式称之为选择排序。

比如上面的输入样例:

第一次遍历a[0]~a[5],a[1]<a[0],交换;a[2]>a[0],跳过;a[3]>a[0],跳过;a[4]>a[0],跳过;a[5]<a[0],交换。

第二次遍历a[1]~a[5],(此时a[0]==114,a[1]==195,a[5]==156),a[2]>a[1],跳过;a[3]>a[1],跳过;a[4]>a[1],跳过;a[5]<a[1],交换。

……

那么具体实现步骤如下:

1,将输入的数存在数组a中。

2,在a[1]~a[n]中选择值最小的元素,与第1位置元素交换,则把最小值元素放入a[1]中。

3,在a[2]~a[n]中选择值最小的元素,与第二位置元素交换,则把第2大值元素放入a[2]中……

4,直到第n-1个元素与第n个元素比较排序为止。

那么程序实现如下:

2,冒泡排序

冒泡排序的思想:以n个人站队为例:从第一个人开始,与相邻的人比较高低是否逆序对(高在前低在后),若逆序就交换两人,然后第2个和第3个比……直到第n-1个和第n个人比。经过了这一轮比较,最高的人被排到了最后面。第二轮从第1个人开始,与第2个人比较,一直到第n-2个人和第n-1个人比较。如此,进行n-1轮后,队列成为有序的队列。

那么程序实现如下:

个人认为这种排序方法最好理解。


3,插入排序

插入排序思想:比如打牌抓牌时,为了方便打牌,我们会按花色大小插入恰当的位置,当抓完所有的牌时,手中的牌便是有序的。插入排序跟抓牌类似。从第二个数开始,取出当前数作为待排序数,逐个与前面数比较。若小于前面数,则前面数后移;当大等于前面数时,插入当前空出的位置,直到第n个数插入正确为止。

程序实现如下:

个人认为插入排序是这三种排序中最难理解的一种了。

以上就是今天的内容了_(爱莉希雅_心动)

部分资料来自《CCF中学生计算机程序设计入门篇》(科学出版社)

已开启创作声明,允许规范转载
10
0
看帖是喜欢,评论才是真爱:
0 / 1000
  • 全部评论
  • 只看楼主
排序:最早
6
0
10
扫码下载
米游社App