您的位置:首页 > 其它

希尔排序

2016-04-03 17:21 267 查看

基本思想

1.把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。
2.随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。

代码实现

package com.csdhsm.sort;

/**
* @Title: ShellSort.java
* @Package: com.csdhsm.sort
* @Description 希尔排序
* @author Han
* @date 2016-4-3 下午5:04:01
* @version V1.0
*/

public class ShellSort {

public void sort(int[] arr,int len){

/**
* 步长默认为长度/2
*/
int gap = len/2;

/**
* 当步长gap为1时,结束排序
*/
while(gap >= 1){

// 把距离为 gap 的元素编为一个组,扫描所有组
for(int i = gap;i < len;i ++){

int temp = arr[i];
int j = 0;

// 对距离为 gap 的元素组进行排序
for(j = i-gap;j >= 0 && temp < arr[j];j = j-gap){

arr[i] = arr[j];
}
arr[j + gap] = temp;
}
//减小增量
gap = gap / 2;
}
}
}


效率分析

不稳定

空间复杂度:O(1)

时间复杂度:O(nlog2n)

最坏情况:O(nlog2n)

最好情况:O()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: