算法之插入排序

直接插入排序:

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)));
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章