面试---算法排序(3)(希尔排序)
2017-07-30 12:09
232 查看
shell排序:
严格来说基于插入排序的思想,又称希尔排序或者缩小增量排序
流程:
①将有n 个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为1对,第2个数据和第n/2+2个数据为一对….
②一次循环使每一个序列队排好顺序
③然后,再变为n/4个序列,再次排序
④不断重复上述过程,随着序列减少最后变成一个,也就完成了整个排序
代码展示:
算法分析:
1 时间复杂度为:O(nlogn)。
2 空间复杂度: O(1)
3 稳定性:不稳定
4 最差情形:O(n^s) 其中s指所选分组
严格来说基于插入排序的思想,又称希尔排序或者缩小增量排序
流程:
①将有n 个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为1对,第2个数据和第n/2+2个数据为一对….
②一次循环使每一个序列队排好顺序
③然后,再变为n/4个序列,再次排序
④不断重复上述过程,随着序列减少最后变成一个,也就完成了整个排序
代码展示:
package third; public class shell { public static void shell(int a[]){ for(int r=a.length/2;r>=1;r/=2){ for(int i=r;i<a.length;i++){ int index=a[i]; int j=i-r; while(j>=0&&a[j]>index){ a[j+r]=a[j]; j-=r; } a[j+r]=index; } } } public static void main(String[] args) { int [] shuzu=new int [10]; for(int i=0;i<shuzu.length;i++){ shuzu[i]=(int)(100+Math.random()*(100+1)); } System.out.print("排序前的数组为:\n"); for (int i=0;i<shuzu.length;i++){ System.out.print(" "+shuzu[i]); } System.out.print("\n"); shell(shuzu); System.out.println("排序后的数组为:"); for(int i=0;i<shuzu.length;i++){ System.out.print(" "+shuzu[i]); } System.out.print("\n"); } }
算法分析:
1 时间复杂度为:O(nlogn)。
2 空间复杂度: O(1)
3 稳定性:不稳定
4 最差情形:O(n^s) 其中s指所选分组
相关文章推荐
- 【牛客网】直通bat-面试算法精品课_第2章 排序 2.8 希尔排序练习题(JAVA版)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 算法熟记-排序系列-希尔排序
- 面试算法:堆栈元素的在线排序
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 算法——排序(二)希尔排序
- 算法-排序-插入排序(直接插入和希尔排序)
- 【牛客网】直通bat-面试算法精品课_第2章 排序 2.2 冒泡排序练习题(JAVA版)
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 【牛客网】直通bat-面试算法精品课_第2章 排序 2.10 基数排序练习题(JAVA版)
- 算法 —— 选择排序,插入排序,希尔排序
- 一点一点的积累算法JAVA版之希尔排序(最小增量排序)
- 面试复习-------算法与数据结构------排序
- 把二元查找树转变成排序的双向链表(JULY微软面试100题系列第一题)的算法思考
- 用JAVA实现排序算法之五:希尔排序
- 牛客网(直通BAT面试算法班) 第二章,排序上,Day2
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 插入排序算法---插入排序与希尔排序