插入排序
来源:互联网 发布:软件开发的发展趋势 编辑:程序博客网 时间:2024/06/05 19:13
直接插入排序
依次将待排序的数据,按其关键值的大小插入到前面的有序序列
实现代码
public class InsertSort{ public static void main(String[] args) { DataWrap[] dataWraps = { new DataWrap(9, ""), new DataWrap(-16, ""), new DataWrap(21, "*"), new DataWrap(23, ""), new DataWrap(-30, "*"), new DataWrap(-49, "*"), new DataWrap(21, ""), new DataWrap(30, "*"), new DataWrap(13, "*") }; System.out.println("排序之前:\n" + Arrays.toString(dataWraps)); insertSort(dataWraps); System.out.println("排序之后:\n" + Arrays.toString(dataWraps)); } public static void insertSort(DataWrap[] dataWraps) { int arrayLength = dataWraps.length; for (int i = 1; i < arrayLength; i++) { // 保存当前关键元素 DataWrap tmp = dataWraps[i]; if (dataWraps[i].compareTo(dataWraps[i - 1]) < 0) { int j = i - 1; for (; j > 0 && tmp.compareTo(dataWraps[j]) < 0; j--) { dataWraps[j + 1] = dataWraps[j]; } dataWraps[j + 1] = tmp; } System.out.println(Arrays.toString(dataWraps)); } }}
这种排序效率不高,时间复杂度:O(
折半插入排序
是对直接插入排序的优化
对前面的有序序列的中间值进行比较
实现代码
public class BinaryInsertSort{ public static void main(String[] args) { DataWrap[] dataWraps = { new DataWrap(9, ""), new DataWrap(-16, ""), new DataWrap(21, "*"), new DataWrap(23, ""), new DataWrap(-30, "*"), new DataWrap(-49, "*"), new DataWrap(21, ""), new DataWrap(30, "*"), new DataWrap(13, "*") }; System.out.println("排序之前:\n" + Arrays.toString(dataWraps)); binaryInsertSort(dataWraps); System.out.println("排序之后:\n" + Arrays.toString(dataWraps)); } public static void binaryInsertSort(DataWrap[] dataWraps) { int arrayLength = dataWraps.length; for (int i = 1; i < arrayLength; i++) { DataWrap tmp = dataWraps[i]; int low = 0; int high = i - 1; while (low <= high) { int mid = (high + low) / 2; // 大于中间值 if (tmp.compareTo(dataWraps[mid]) > 0) { low = mid + 1; } else { high = mid - 1; } } for (int j = i; j > low; j--) { dataWraps[j] = dataWraps[j - 1]; } dataWraps[low] = tmp; System.out.println(Arrays.toString(dataWraps)); } }}
与直接插入排序的效果基本相同,只是更快一些
Shell排序
实现代码
public class ShellSort{ public static void main(String[] args) { DataWrap[] dataWraps = { new DataWrap(9, ""), new DataWrap(-16, ""), new DataWrap(21, "*"), new DataWrap(23, ""), new DataWrap(-30, "*"), new DataWrap(-49, "*"), new DataWrap(21, ""), new DataWrap(30, "*"), new DataWrap(13, "*"), new DataWrap(15, ""), new DataWrap(28, "*"), new DataWrap(-2, "*") }; System.out.println("排序之前:\n" + Arrays.toString(dataWraps)); shellSort(dataWraps); System.out.println("排序之后:\n" + Arrays.toString(dataWraps)); } public static void shellSort(DataWrap[] dataWraps) { int arrayLength = dataWraps.length; int h = 1; while (arrayLength / 3 >= h) { h = h * 3 + 1; } while (h > 0) { System.out.println("===h的值:" + h + "==="); for (int i = h; i < arrayLength; i++) { DataWrap tmp = dataWraps[i]; if (dataWraps[i].compareTo(dataWraps[i - h]) < 0) { int j = i - h; for (; j >= 0 && dataWraps[j].compareTo(tmp) > 0; j -= h) { dataWraps[j + h] = dataWraps[j]; } dataWraps[j + h] = tmp; } System.out.println(Arrays.toString(dataWraps)); } h = (h - 1) / 3; } }}
阅读全文
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- GOTURN算法在ubuntu14.04+only_cpu环境下编译运行
- linux 下新安装tomcat执行.sh文件总是提示permission denied
- Context类getString(@StringRes int resId, Object... formatArgs)的使用
- 【bzoj4289: PA2012 Tax】图论--建图
- Eclipse中配置SVN插件
- 插入排序
- JAVA基础——初识JAVA(五)(流程控制、分子语句、循环语句、特殊流程控制语句)
- 使用Xml简单实现学生管理系统
- CentOS 7安装Python 3.6,pip3报错问题
- Selenium入门记录_001_环境配置和Hello World!
- jQuery表格内容筛选
- Eclipse+Maven环境下java.lang.OutOfMemoryError: PermGen space及其解决方法
- firewalld and iptables
- 贝塞尔曲线