shell排序

思想:因爲插入和冒泡排序是交換相鄰的兩個逆序數,裏面有多少個逆序對,就要交換多少次。有學者發現,若是不是交換相鄰的逆序對,就可能一次交換能消滅幾個逆序對,這樣就可能提升效率。shell

//利用了插入排序的思想,對每個子序列從宏觀上看是進行插排,但在實際上操做時,並非一次把每一個子序列用插排好,更像並行的方式進行,但結果又不相互影響 public class shell_sort {code

public static void main(String[] args) {

    int a[]={1,7,3,9,0,4,5,6};
	
    int b[]=a;
	
    for(int i=0;i<a.length;i++)
	
        System.out.print(a[i]+" ");
		
    System.out.println();
	
    insert_shell(a);
	
    for(int i=0;i<a.length;i++)
	
        System.out.print(a[i]+" ");
		
    System.out.println();
}

public static void insert_shell(int a[]){

    int n=a.length;
	
    int temp;
	
    //第一個for循環控制間隔
	
    for(int i=n/2;i>0;i=i/2) {
	
        //下面兩個for是對插入排序的使用
		
        //這個控制着位置,這個這個插排不是沒一次循環就解決一個子序列的插排,
		
        // 而是同時進行多個,當條件符合時才進行那個子序列,真好j++這個又能
		
        //讓整個全部自序列完成
		
        for(int j=i;j<n;j++) {
		
            temp = a[j];
			
            int k;
			
            for ( k = j; k >= i && temp < a[k - i]; k = k - i)
			
                a[k] = a[k - i];
				
            a[k] = temp;
        }
    }
}

}排序

相關文章
相關標籤/搜索