直接插入排序和希尔排序的总结
来源:互联网 发布:淘宝网新生活化妆品 编辑:程序博客网 时间: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] = 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);
}
}输出结果:
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
第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)
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();
}
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
- 直接插入排序和希尔排序的总结
- 插入排序(直接 和 希尔)
- 直接插入排序和希尔排序
- java直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 【直接插入排序】和【希尔排序】
- 直接插入排序和希尔排序
- 数据结构排序--直接插入和希尔排序
- 选择、直接插入、冒泡和希尔排序总结
- 插入排序:直接插入排序和希尔排序
- 关于插入排序 直接插入排序和希尔排序
- 插入排序--直接插入排序和希尔排序
- 插入排序--直接插入排序和希尔排序
- (2.1.19)注释与注解
- Linux使用wget请求地址时报错
- Android实战简易教程-第四十三枪(Shell Script 运行Command)
- Unity3D开发——安卓版的虚拟按键实现
- Memcached 在windows下的java使用
- 直接插入排序和希尔排序的总结
- 多态性和虚函数
- openfire,XMPP,smack,android下离线消息的接收
- git 运用技巧
- 面向对象方法-------RUP
- Shell脚本——批量安装Apk
- hdu 5417 Victor and Machine
- charles抓接口步骤
- 寻找第K大的数