Day564.希尔排序 -数据结构和算法Java
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day564.希尔排序 -数据结构和算法Java相关的知识,希望对你有一定的参考价值。
希尔排序
1、介绍
插入排序Plus
2、基本思想
3、排序示意图
4、交换法代码实现
//交换法
public static void shellSort1(int arr[])
int temp = 0;
//整合
for (int gap = arr.length/2 ; gap > 0 ; gap /= 2)
for (int i = gap; i < arr.length; i++)
//遍历各组中所有的元素(共gap组)步长是gap
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;
第一轮排序
因为第一轮排序,是将10个数据分成了 10/2 = 5组
//for (int i = 5; i < arr.length; i++)
// //遍历各组中所有的元素(共5组,每组2个元素)
// for (int j = i - 5; j >= 0; j -= 5)
// if (arr[j] > arr[j + 5])//需要交换
// temp = arr[j];
// arr[j] = arr[j + 5];
// arr[j + 5] = temp;
//
//
//
//System.out.println(Arrays.toString(arr));
//
第二轮排序
5/2 = 2组
//for (int i = 2; i < arr.length ; i++)
// for (int j = i - 2; j >= 0; j -= 2)
// if (arr[j] > arr[j + 2])//需要交换
// temp = arr[j];
// arr[j] = arr[j + 2];
// arr[j + 2] = temp;
//
//
//
//System.out.println(Arrays.toString(arr));
//
第三轮排序
2/2 = 1组
//for (int i = 1; i < arr.length; i++)
// for (int j = i - 1; j >= 0; j -= 1)
// if (arr[j] > arr[j + 1])//需要交换
// temp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = temp;
//
//
//
System.out.println(Arrays.toString(arr));
5、移动法代码实现
效率高
//移动法
public static void shellSort2(int arr[])
int temp = 0;
for (int gap = arr.length / 2; gap > 0; gap /= 2)
//从第gap个元素,逐个对其所在的组进行直接插入排序
for (int i = gap; i < arr.length; i++)
int j = i;
temp = arr[j];
if (arr[j] < arr[j - gap])
while (j - gap >= 0 && temp < arr[j - gap])
//移动
arr[j] = arr[j-gap];
j -= gap;
//当退出while后,就给temp找到插入的位置
arr[j] = temp;
以上是关于Day564.希尔排序 -数据结构和算法Java的主要内容,如果未能解决你的问题,请参考以下文章