直接插入排序:
package InsertSort;
//插入排序之直接插入排序
//直接插入排序基本思想
//在要排序的一組數中,假設n-1個數已經排好,將第n個數插入到已經排好的序列中
//如此反覆循環,直至所有的數排好。
public class DirectInsertSort {
public int[] insertSort(int[] data){
//兩層for循環
//一組數,先是獲得這組數中的第i個數,放置在tmp變量中,然後用第i個數與i個之前數比較
int i,j;
for(i = 1;i<data.length;i++){
int tmp = data[i];
for(j = i;j>0 && tmp<data[j-1];j--){
data[j] = data[j-1];
}
data[j] = tmp;
}
return data;
}
public String toString(int[] data){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<data.length;i++){
sb.append(data[i]+",");
}
int len = data.length;
return sb.toString()+"]";
}
}
public String toString1(int[] data,int k){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<k;i++){
sb.append(data[i]+",");
}
//int len = data.length;
return sb.toString()+"]";
}
}
public static void main(String[] args){
int[] data = {5,2,3,8,1,9,10,6,4};
DirectInsertSort dis = new DirectInsertSort();
System.out.println(dis.toString(dis.insertSort(data)));
System.out.println(dis.toString1(dis.insertSort(data),5));
}
}
希爾排序:
package InsertSort;
//插入排序之希爾排序
//希爾排序的本質仍爲插入排序,通過增量的設置提高了效率
//增量的設置設爲d1=N/2,是將待排序數組分爲若干個子數組,再進行直接插入排序
//然後增量設置爲d2=d1/2,再進行插入排序,直至增量爲1,進行直接插入排序,結束操作
public class shellSort {
public int[] shellSortTest(int[] data){
int tmp;//將待插入元素存入一空間內
int i,j=0;
int x = 0;
double d = data.length;
while(true){
//將待排序數組分爲d1個字數組
d = Math.ceil(d/2);
int d1 = (int)d;
//取出子數組中的元素
for(i=0;i<data.length;i++){
for(j=i+d1;j<data.length;j+=d1){
tmp = data[j];
for(x=j-d1;x>=0&&tmp<data[x];x-=d1){
//如果待排序元素x小於x-d1元素
data[x+d1] = data[x];
}
data[x+d1] = tmp;
}
}
if(d==1)
break;
}
return data;
}
public String toString(int[] data){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<data.length;i++){
sb.append(data[i]+",");
}
int len = sb.length();
sb.delete(len-1,len);
return sb.toString()+"]";
}
}
public static void main(String[] args){
int[] data = {1,54,6,3,78,34,12,45,56,100};
shellSort dis = new shellSort();
System.out.println(dis.toString(dis.shellSortTest(data)));
}
}