希尔排序算法的思路
希尔排序算法也是一种插入排序,由于在直接插入算法中,当要插入的数很小的时候,有序表中的后移次数会增多,所以会影响效率。
希尔排序是将待排序的元素按照一定的增量(gap)进行分组,在每一组中进行直接插入排序,在一个增量下完成每组的直接插入排序后,更新增量,再进行每组的直接插入排序。直至增量为1,则排序完成。
希尔排序算法的性质
1、最差时间复杂度:O(n^s)其中1<s<2,s是所选的分组
2、平均时间复杂度:O(nlogn)
3、稳定性:不稳定
希尔排序算法的代码实现
这里进行从小到大排序
public static void shellSort(int[] arr) {
int temp = 0;//临时变量,用于交换
for (int gap = arr.length/2;gap > 0;gap /= 2){//增量每次对半
for (int i = gap;i < arr.length;i++){
for (int j = i - gap;j >= 0;j -= gap){
//如果当前元素大于加上增量之后的那个元素,则交换,即进行组内排序
if (arr[j] > arr[j+gap]){
temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;
}
}
}
}
}
主函数进行验证
public static void main(String[] args) {
int[] arr = {8,9,1,7,2,3,5,4,6,0,3,2};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
结果如下:[0, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9]
标签:arr,int,希尔,gap,算法,排序 来源: https://blog.csdn.net/Zyl_uncle/article/details/115368878
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。