直接插入排序和希尔排序的总结

来源:互联网 发布:淘宝网新生活化妆品 编辑:程序博客网 时间:2024/06/05 11:46

     直接插入排序算法代码(Java)

public class Array_insertSort {

public static void insertSort(int[] table) {//table为无序的
for (int i = 1; i < table.length; i++) {
/*將第一個元素做为比较对象, 为的就是给有序数组进行腾置空间,放到有序的数组里,如:                              *   {1}3 ,2,5,4,8,7,9,6.
* i=1  时3 和1 比较大小。
* 内层循环是在有序的数组里进行排序,放到第一个不比它大的下一个元素位置,
* 如:{1,3}2,5,4,8,7,9,6 。          2将于3比较,2<3所以放到3前面{1,2,3}5,4,8,7,9,6
* print()函数是将排列好的数组进行输出。
**/
int temp = table[i], j;

for (j = i - 1; j >= 0 && temp < table[j]; j--)

                       //i-1表示后面的无序数组变为前面的有序数组,

                       //如:{1}3 ,2,5,4,8,7,9,6变为{1,3}2,5,4,8,7,9,6

table[j + 1] =    table[j];
table[j + 1] = temp;
System.out.print("第" + i + "趟");
print(table);
}
}

public static void print(int[] table) {
for (int i = 1; i < table.length; i++) 
System.out.print(table[i]);

}


public static void main(String[] args) {
int[] a = { 1, 3, 2, 5, 4, 8, 7, 9, 6 };
insertSort(a);
}

}运行的结果:第1趟32548796
第2趟23548796
第3趟23548796
第4趟23458796
第5趟23458796
第6趟23457896
第7趟23457896
第8趟23456789

shell排序算法

public class Array_shellSort {
public static void shellSort(int[] table) {
for (int delt = table.length / 2; delt > 0; delt /= 2) 
for (int i = delt; i < table.length; i++) {
int temp = table[i], j;
for (j = i - delt; j >= 0 && temp < table[j]; j-=delt)
table[j + delt] = table[j];
table[j + delt] = temp;
   System.out.print("第" + (i-delt+1) + "趟");
print(table);
System.out.println();
}
}


public static void print(int[] table) {
for (int i = 1; i < table.length; i++)
System.out.print(table[i]);
}
public static void main(String[] args) {
int[] a = { 1, 3, 2, 5, 4, 8, 7, 9, 6 };
shellSort(a);
}
}输出结果:
第1次32548796
第2次32548796
第3次32548796
第4次32548796
第5次32548796
第1次32548796
第2次32548796
第3次32548796
第4次32548796
第5次32548796
第6次32548796
第7次32548697
第1次32548697
第2次23548697
第3次23548697
第4次23458697
第5次23458697
第6次23456897
第7次23456897
第8次23456789
可以看出,程序走了3趟。

直接排序算法和希尔排序算法比较

希尔排序内层循环:跳的步距为delt=table.length/2,而直接排序跳的步距为1,当步距为1时,程序稳定。
以下红色字体是直接排序的算法
for (int i = delt; i < table.length; i++) {// 直接排序的for (int i = 1; i < table.length; i++) 
int temp = table[i], j;  //int temp = table[i], j;
for (j = i - delt; j >= 0 && temp < table[j]; j-=delt)

//for (j = i - 1; j >= 0 && temp < table[j]; j--)

table[j + delt] = table[j];//table[j + 1] =    table[j];
table[j + delt] = temp;//table[j + 1] = temp;
       System.out.print("第" + (i-delt+1) + "次");//System.out.print("第" + i + "趟");
       print(table);//print(table);
      System.out.println();
}

从上面比较来看,希尔排序算法和直接排序算法基本上一样。


0 0
原创粉丝点击