一、设计思路
1.插入排序
(1)利用位移法,每次选择一个还未排序的数据和已经排过序的所有数据进行比较
(2)如果已排序的数比需要排序的数大,则向后移动,让位(不是交换)
(3)直到找到已排序的数比需要排序的数小时,证明已经找到了需要排序数应该插入的位置
(4)将需要排序的数插入进合适的位置
2.希尔排序
(1)在插入排序的基础上改进的
(2)每次得到一个步长(arr.length/2),根据步长进行分组,并将每组的数据进行插入排序
(3)直到最后步长为1时,再最后进行一次插入排序就能得到最终结果
二、代码实现(希尔排序)
public static void main(String[] args) {
int[] arr = { 2, 3, 7, 5, 4 ,6,1,8};
//每次算出的步长,直到步长为1
for(int tag = arr.length/2;tag>=1;tag=tag/2){
//根据步长可以得到有几组需要排序的数据
for(int tag1 = 0;tag1<tag;tag1++){
//就是一个直接排序
for (int i = tag1; i < arr.length; i+=tag) {
int temp1 = arr[i];
int count = -1;
for (int j = i - tag; j >= 0; j-=tag) {
if (temp1 < arr[j]) {
//移位
arr[j+tag] = arr[j];
count = j;
} else {
break;
}
}
if(count>=0){
//将需要排序的值插入合适位置
arr[count] = temp1;
}
}
}
}