本系列为C++的入门学习者服务,旨在于为此前无C++基础的学习者简单介绍关于C++语言基础的部分知识,如果已入门C++,则不需要阅读本系列。
4.1 排序问题
排序是数据处理中经常使用的一种重要运算。其功能是将数据元素的无序序列调整为有序序列。
- 数据元素一般包含多个数据项,排序时可选择其中一个可排序的数据项作为依据,称为排序关键字
- 可以保证排序结果唯一性的关键字称为主关键字(次关键字)
- 从小到大排序称升序,反之称为降序
4.2 常用排序算法
1. 冒泡排序 (Bubble Sort)
(1) 基本思想
按关键字两两比较一组元素,如果发现逆序则交换,从而依次将最大数向右移,每一次当整个循环完成后,都将当次比较的元素中的最大数交换到末端,而后只用比较除了最大数(即数组最末尾的数)外的n-1
个数,直到所有的对象都排好序为止。
(2) 算法示例
对序列 { 21,25,49,25,16,8 }
内的元素采用冒泡排序算法进行从小到大排序。

(3) 代码示例
1 | for(int i = 0; i < n; i++) //每次大循环都缩减一个比较对象个数(即每次循环都确定比较组中的末对象) |
2. 选择排序 (Selection Sort)
(1) 基本思想
每一次从待排序的记录中选出关键字最小的元素,顺序放在已排好的子序列后面,直到全部记录排序完成。
即:第1轮遍历整个序列,找到序列中最小的数据,将该数据与第1个数据进行交换,至此一轮结束,最小的数据被交换到最前面;然后缩小遍历范围,按照同样的方法继续下一轮,直至最后一个数据。
(2) 算法示例
对序列 { 21,25,49,25,16,8 }
内的元素采用选择排序算法进行从小到大排序。

(3) 代码示例
1 | int i, j, k, temp; |
3. 插入排序 (Insertion Sort)
(1) 基本思想
将n个元素的序列分为已有序和无序两个部分,每次处理就是将无序序列的第1个元素与有序序列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序序列的合适位置中。
注:插入排序包括直接插入排序和对半插入排序。
(2) 直接插入排序
① 算法过程
当插入第i
位置的元素时,前面第0
到i-1
的位置都已排好序,将第i
位置的元素从后向前与前面的元素进行比较,找到第1个比它小的,则将第i位置的元素插入到该元素之后。
② 算法示例
对序列 { 21,25,49,25,16,8 }
内的元素采用直接插入排序算法进行从小到大排序。

③ 代码示例
1 | for (i = 1; i < n; i++) //从第二项开始建立比较组,其中前面的项是有序数列,第i项就是无序项 |