赞
踩
下面我们来看一下希尔排序
目录
希尔排序是插入排序的一种优化,可以理解为是一种分组的插入排序。
希尔排序的要点:
简单来说,就是分组实现插入,每组元素的间隙称为gap,一开始给你一个无序数组,然后我们以gap为间隙对这个数组进行分组,然后在每组内对数据进行排序,这就实现了每组的数据有序性。然后,我们减小gap的值,然后再分组,再对每组内的数据进行排序,直到gap为1完成排序。希尔排序是对插入排序的优化,可以让元素跟快的交换到最终位置。
举例说明:
如下图所示,一开始是无序数组,8个元素,然后我们分为4组,gap值为4,序号1的图;然后在这四组内进行排序,实现了组内有序,序号2的图;然后我们再分组,分为6组,gap值为2,序号3的图;然后再排序,再次实现了组内有序,序号4的图;依次类推,直到gap值为1,数组就排好序了。
下面看一下代码的实现:
- package Sorts;
-
- import java.util.Arrays;
- //希尔排序
- public class XiErSort {
- public static void main(String[] args) {
- int [] arr = new int []{5,9,2,7,3,1,10};
- xiEr(arr);
- System.out.println(Arrays.toString(arr));
- }
- public static void xiEr(int arr[]){
- for (int gap = arr.length/2; gap >0 ; gap /=2) {
- for (int low = gap; low <arr.length ; low++) {
- int t = arr[low];
- int i = low - gap;
- //自右向左找插入位置,如果比待插入的元素大,则不断右移,空出插入位置
- while (i >= 0 && t < arr[i]){
- arr[i+gap] = arr[i];
- i-=gap;
- }
- //找到插入位置
- if(i != low-gap){
- arr[i+gap] = t;
- }
- }
- }
- }
- }

不算难,就是插入排序的一个优化,结合代码来看很好理解的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。