插入排序和希尔排序
2018-01-15 17:01
141 查看
/** * @author shenqi * @date 2018/1/15. */ /** * 插入排序 * 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。 * 从第一个元素开始,该元素可以认为已经被排序 * 取出下一个元素,在已经排序的元素序列中从后向前扫描 * 如果该元素(已排序)大于新元素,将该元素移到下一位置 */ public static void insertSort(int [] numbers){ int size = numbers.length; int temp = 0; int j = 0; for (int i = 0 ; i < size ; i++){ temp = numbers[i]; //假如temp比前面的值小,则将前面的值后移 for (j = i ;j > 0 && temp < numbers[j-1] ; j--){ numbers[j] = numbers[j-1]; } numbers[j] = temp; } } /** * 希尔排序 * 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序 * 首先将数组进行分组,然后将较大值移到前面,较小值移到后面,最后将整个数组进行插入排序 * 这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强版的插入排序 * */ public static void shellSort(int [] data){ int j = 0; int temp = 0; //每次将步长缩短为原来的一半 for (int increment = data.length/2 ; increment > 0 ;increment /= 2){ for (int i = increment ; i < data.length ; i++){ temp = data[i]; for (j = i ; j >= increment ; j -= increment){ if (temp < data[j -increment]){ data[i] = data[j-increment] }else { break; } } } } }
相关文章推荐
- 直接插入排序、希尔排序、堆排序的比较
- 插入排序与希尔排序
- 排序:插入排序及希尔排序
- 编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
- 8 -- 插入排序之希尔排序
- 数据结构---------插入排序和希尔排序
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 插入排序之--希尔排序
- 插入排序和希尔排序
- java直接插入排序和希尔排序
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 插入排序之希尔排序
- Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)
- 必须掌握的八种排序(1-2)--插入排序,希尔排序
- 直接插入排序与希尔排序
- 插入排序与希尔排序
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 插入排序,希尔排序
- 直接插入排序 && 折半插入排序 && 希尔排序