直接插入排序
来源:互联网 发布:淘宝卖电影资源犯法 编辑:程序博客网 时间:2024/05/29 11:27
直接插入排序的算法思想:直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。
根据该思想,编写代码如下(从已有序列的第0个记录开始比较):
public static void insertSort1(int[] ele) { for (int i = 1; i < ele.length; i++) {
for (int j = 0; j < i; j++) { if (ele[i] < ele[j]) { //如果第i个元素小于第j个元素(也就是说第i个元素应该插入到第j个元素的位置) int temp = ele[i]; for (int k=i-1; k>=j; k--) { //从滴j个元素到第i-1个元素全部后移一个位置 ele[k+1] = ele[k]; } ele[j] = temp; //将第i个元素插入到第j个元素的位置上 break; //注意,如果没有这个break,则循环次数会多很多 } } } //打印出排序后的结果 for (int i = 0; i < ele.length; i++) { System.out.println(ele[i]); }
}
该算法看上去有三层循环嵌套,而实际上算法的复杂度是O(n^2),因为总的比较次数和移动(赋值)的次数加起来为n(n-1)/2.
另一种代码:
public static void insertSort(int[] elements) { for (int i = 1; i < elements.length; i++) { int j = -1; // 找到element[i]应该摆放的位置,此处可以利用查找算法进行优化 while (j < i && elements[i] > elements[++j]); // 将j之后的数据移动一位,然后把elements[i]移动到j处 int temp = elements[i]; for (int k = i - 1; k >= j; k--) { elements[k + 1] = elements[k]; } elements[j] = temp; } for (int i = 0; i < elements.length; i++) { System.out.println(elements[i]); } }
第二版的代码(从已有序列的最后一个开始比较):
public static void insertSort2(int[] r) {for (int i=0; i<r.length; i++) {int j = i-1;int temp = r[i];while (j>=0 && temp < r[j]) {r[j+1] = r[j];r[j] = temp;j--;}}for (int i=0; i<r.length; i++) {System.out.println(r[i]);}}
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- Vi编辑器的基本使用方法
- .net 面试题目
- 区位码转换为双字节字符(含汉字)
- MFC菜单、子菜单、菜单项的控制
- 树型动态规划
- 直接插入排序
- 自制服务器的琐碎局部资料
- 一个线程池实例代码的分析
- VC讲义大纲
- 通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建.
- POJ 1318 Word Amalgamation(我的水题之路——乱序字母匹配)
- 蛇、黄鼠狼与老鼠
- 蛇 与 蟹
- 三种想其他线程地址空间注入自己带吗