Skip to content

Commit

Permalink
希尔排序交换式
Browse files Browse the repository at this point in the history
  • Loading branch information
leohanwww committed Dec 12, 2020
1 parent f9d4ce3 commit 013b2f6
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/com/atguigu/sort/InsertSort.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static void insertSort(int[] arr) {
int insertVal = 0; //arr[i]; //待插入的数34
int insertIndex = 0; // i - 1; //arr[1]前面的一个的下标
for (int i = 1; i < arr.length; i++) {
//第一轮,{104,34,119,1}
//第一轮,{101,34,119,1}
insertVal = arr[i]; //待插入的数暂定为数组排除开头的一个的第1个值,为34
insertIndex = i - 1;
//给insertVal找到插入位置,insertIndex>=0为了数组不越界
Expand Down
83 changes: 83 additions & 0 deletions src/com/atguigu/sort/ShellSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.atguigu.sort;

import java.util.Arrays;

//希尔排序
public class ShellSort {
public static void main(String[] args) {
int arr[] = {8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
shellSort(arr);
System.out.println("处理完成后数组是:"+ Arrays.toString(arr));

}

//逐步推导
public static void shellSort(int[] arr) {
int temp = 0;
for (int len = arr.length/2;len>0;len/=2){
for (int i = len; i < arr.length; i++) {
//内循环遍历各组中所有的元素,5组,每组2个元素
for (int j = i - len; j >= 0; j -= len) {
//本组元素大于加上步长的那个元素,说明需要交换
if (arr[j] > arr[j + len]) {
temp = arr[j];
arr[j] = arr[j + len];
arr[j + len] = temp;
}
}

}
}





/* //希尔排序第一轮
//第一轮排序,将10个数据分成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分成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分成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));
*/
}
}

0 comments on commit 013b2f6

Please sign in to comment.