赞
踩
#笔记整理
内部排序分类目录:
-->插入排序
- 交换排序
- 选择排序
- 归并排序
- 计数排序
插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止。
共有5种插入排序方法:
(1) 直接插入排序;
(2) 折半插入排序;
(3) 2-路插入排序;
(4) 表插入排序;
(5) 希尔排序。
一种最简单的排序方法,它的思路是将待插记录逐一与有序部分进行比较以确定插入的位置。
算法C++实现如下:
// 直接插入排序法,对容器 nums 进行排序 void sInsertion(vector<int> &nums){ int len = nums.size(); for(int i = 1; i < len; i++){ // 以第一个数(nums[0])为已排好序的部分,将之后的记录进行插入 if(nums[i] < nums[i-1]){ int temp = nums[i]; // 临时变量,用于存储 nums[i] int j = i - 2; nums[i] = nums[i-1]; while(j >= 0 && temp < nums[j]){ // 从后往前,寻找 temp 应插入的位置 nums[j+1] = nums[j]; // 记录后移 j--; } nums[j+1] = temp; // 插入正确的位置 } } }
直接插入排序所需进行关键字间的比较次数和记录移动次数约为: n 2 / 4 n^2 / 4 n2/4,
算法时间复杂度为: O ( n 2 ) O(n^2) O(n
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。