【java学习】排序_Shell排序
来源:互联网 发布:巴纳姆效应 知乎 编辑:程序博客网 时间:2024/05/21 09:35
排序思想
shell排序是基于插入排序的一种改进,它先将待排序数组分成几份然后对各部分数组进行插入排序,然后继续对数组进行细分并排序,最后对整个数组进行插入排序,这样做的目的是为了在最后进行的对整个数组进行排序的时候,保证此时的数组尽可能有序,那么需要让元素交换位置的操作会少很多。
这个算法的时间复杂度是O(nlog(n))
代码
package shell;import java.util.Arrays;// shell排序public class ShellDemo { public static int arr[] = { 23, 5, 37, 43, 56, 28, 91, 34, 213 }; public static void main(String[] args) { System.out.println(Arrays.toString(arr) + "first"); // 执行希尔排序算法 shellSort(arr.length - 1); System.out.println(Arrays.toString(arr) + "last"); } private static void shellSort(int index) { // TODO Auto-generated method stub boolean change = false; // 数据是否改变 int dataLength = index / 2; // 分割集合间的间隔 int pointer = 0; // 进行处理的位置 while (dataLength != 0) { // 对各个集合进行处理 for (int i = dataLength; i < index; i++) { change = false; pointer = i - dataLength; // 进行集合间的元素比较和交换 while (arr[pointer + dataLength] < arr[pointer] && pointer >= 0 && pointer <= index) { // 交换 int temp = arr[pointer]; arr[pointer] = arr[pointer + dataLength]; arr[pointer + dataLength] = temp; // 计算下一个要进行处理的位置 pointer = pointer - dataLength; change = true; if (pointer < 0 || pointer > index) break; } // 与最后的数值交换 if (change) { System.out.println(Arrays.toString(arr) + "current=" + i); } } dataLength = dataLength / 2; } }}
0 0
- 【java学习】排序_Shell排序
- 04_Shell排序
- 希尔排序_Shell Sort
- linux学习笔记_Shell
- 01_shell学习
- Java 学习排序
- Java学习---冒泡排序
- Java学习---排序
- java学习之排序
- Java学习之排序
- java学习--冒泡排序
- Java排序算法学习
- java排序算法学习(一)--冒泡排序
- java排序算法学习(一)--选择排序
- java简单排序学习之插入排序
- Java学习-插入排序2-希尔排序
- java学习之 数组排序-选择排序
- 【Java学习】排序_插入排序
- 进程和线程关系及区别
- HDU 5922 Minimum’s Revenge 【最小生成树】
- [LeetCode]--165. Compare Version Numbers
- jQuery实现遍历单选框
- Android 实现app的版本升级(迭代)
- 【java学习】排序_Shell排序
- SpringMVC
- HDU 5926 Mr. Frog’s Game (水)
- 滚动拖拽
- Pixhawk原生固件PX4之常用函数解读
- jQuery实现遍历复选框
- 大富翁的游戏规则
- MyEclipse ci3中JSP乱码
- Srapy - Architecture overview【Data flow】