1.直接插入排序
思想:将每个数字当作插入一个已经有序的数组中,则只需要找到比该数字大的第一个数字b,从b及其之后的每个数字都往后移动一位,将新数字插入到b原来的位置即可
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
String[] strArray=line.split(" ");
int n=strArray.length;
int[] array=new int[n];
for(int i=0;i
=0&&array[j]>temp){
array[j+1]=array[j];
j--;
}
array[j+1]=temp;
}
}
}
}
2.希尔排序
思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,一般的初次取序列的一半为增量,以后每次减半,直至所取的增量
为1,
即所有记录放在同一组中进行直接插入排序为止
优势:比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
String[] strArray=line.split(" ");
int n=strArray.length;
int[] array=new int[n];
for(int i=0;i
=1;step/=2){
for(int i=step;i
=0&&array[j]>temp){
array[j+step]=array[j];
j-=step;
}
array[j+step]=temp;
}
}
}
}
}