[Javaの] 9とソートアルゴリズムの概要を実装

1.直接挿入ソート

   考え:各パスが重要な要素として、ローになり、そのキーに挿入される大きさに応じされた部分配列のソート挿入が完了するまでに行わ。

   実装:

     静的ボイドinsertSort公衆(ARR INT []){ 
		ため(INT I = 1; Iは<arr.length; Iは++){//第二の補間値から始まる
			整数値=のARR [i]は、 // 要素が挿入されます
			POST =私はint型、
			一方(POST> 0 && ARR [-POST 1]>値){ 
				ARR [POST]は= ARR [-POST 1。]; 
				POST - ; 
			} 
			ARR [POST] =値; //挿入見つけます位置
		} 
	}

 

 
2.バブルソート

   アイデア:交換を完了するための一連のアクション。

    最初のパス:後者よりも前者の第2の比較との最初の要素、Ruoguo、二つのスイッチング位置、ペアワイズ比較、最終要素に対する最大位置まで。

    第二のパス:第二要素との最初の比較は、N-1と比較されています

   実装:

基本バブルソート// 
	パブリック静的ボイドbubbleSort1([] ARR、INT nのINT){ 
		Iは、J int型、
		ため(I = N-1、I> 0; I - ){//外部ループコンパレータN -1回:第二の位置への最後の決定された値の最後の位置に値を決定する
			(; J <J = 0に対して I、J ++){// 内部ループ
				IF(ARR [J] > ARR [J + 1]){ 
					int型ARRのTEMP = [J + 1]; 
					ARR [J + 1] = ARR [J]; 
					ARR [J] = TEMP; 
				} 
			} 
		} 
	}
 
  //バージョン改善バブルソート
	パブリック静的ボイドbubbleSort2(INT [] ARR、N-INT){ 
		、JをI int型; 
		ための(I = N - 1; I> 0; I - ){ 
			フラグ= 0のint; 
			のため( J = 0; J <I、J ++){ 
				IF(ARR [J]> ARR [J + 1]){ 
					int型のTEMP = ARR [J + 1]; 
					ARR [J + 1] = ARR [J]; 
					ARR [ J] = TEMP; 
					フラグに= 1;交換が発生した場合//、次いで標識をさせる1。
				  } 
				} 
		      IF(フラグに== 0)     
		       {リターン;}   
		} 
	}

3.ソート

考えました:

    選択もソート交換一種であり、バブルソート、特定の類似性が改善バブリング考えることができました。
    最大値または最小値に見出される1ソートされていない配列、開始位置に照合順序
    2.カラムの終わりに分類未分類の残りの要素から最大値(より小さい)素子、を探し続けます。
    すべての要素がソートされるまで、3を繰り返しステップ。

実装:

SelectSortクラス{パブリック
        //増分配列ので、
	パブリック静的ボイドSelectSort(INT [] ARR、N-INT){   
		int型のTEMP、分= 0; 
		IF((ARR == NULL)||(arr.length == 0))
	        リターン; 
	    のための(INT I = 0、I <N - 、I ++){ 
	        分= I; //最小データアレイ添字不規則領域
	                            //最小サイクル検索
	        (int型J = I + 1 、J <N; jは++ ){//最小ランダム領域に格納されたデータとその配列のインデックスを見つける
	            IF(ARR [分]> ARR [J]){ 
	                分= J; 
	            } 
	        } 
	        !IF(MIN = I){ 
	            TEMPのARR = [I ]; 
	            ARR [I] = ARR [分]; 
	            ARR [分] = TEMP; 
	        } 
	    } 
	}	 
}
 

4.クイックソート

 考えました:

     1.最初の要素と、配列の最後の要素への2つのポインタのポイントを定義します。

     それが基準を超えるに遭遇するまで、後方正面からトランスデューサの走査方向と、それが基準値を、二つのポインタの交換値未満に遭遇するまで、第1、往走査から第1基準要素を渡す2.値、二つのポインタの交換価値。
     頭部および尾部は、2つの一致し、基準値へのポインタをポインタするとき、その値と参照点は交換可能にします。

     3.前部および後部、それぞれ、再帰的な高速放電の。

 実装:

パブリッククラスクイックソート{ 
	パブリック静的ボイドquickSort3(INT [] ARR、INT低い、INT高い){ 
		IF(低い>ハイ){ 
		   リターン。
		} 
		int型I、J、一時; 
		I =低いです。
		J =高いです。
		一時=のARR [低]。
		一方、{(I = J!)
			(iは<jの&&温度<= ARR [J])しながら{j--;} 
			  もし(I <jの){ 
			  ARR [I] =のARR [J]。
			   I ++; 
			  } 
			
		    (iは<jで&& TEMP> = ARR [i])としながら、{iは++;} 
			(iは<jの)場合{ 
			 [J] =のARR ARR [I]。
			 j--; 
			} 
		 } 
		[I] = TEMP ARR。
		クイックソート(ARR、低、I-1)。
		クイックソート(ARR、iは高く、1 +)。
	} 
}

 5.マージソート

 長さ1の配列に分割統治、再帰的配列、次いで順序付けられた配列に結合、順序付けられたアレイに2つの順序付けられた配列を:思いました。

 実装:

パブリッククラスMerge_Sort { 
	パブリック静的ボイドソート{(INT [] Aは、左INT、右INT)
        ; MID =(左+右)/ 2 int型   
        IF(左<右){ 
            ソート(A、MID左)、
            ソート( 、ミッド+ 1、右) ; 
            について//マージ
            マージ(左、MID、右); 
        } 
    } 
	//注文注文した二つのうちの一つに入れ
	パブリック静的ボイドマージ(INT [] ARRを、 Lはint、int型のMは、Rはint){ 
		INT []新しい新しいTEMP = [L-R&LT + 1] int型、
		int型I = L; 
		int型M = J + 1; 
		INTはK = 0; 
		// 2つの小さな置きます新しいアレイに添加
		しながら(I <= M && J <= R&LT){ 
			IF(ARR [I] <ARR [J])
				TEMP [K ++] = ARR [I ++]; 
			他の
				TEMP [K ++] = ARR [J ++]。
		} 
		//新しい配列の残りの部分の左側に番号を追加
		一方、(I <= M){ 
			TEMP [K ++] = ARR [I ++]; 
		} 
		にアレイの残りの右側の番号を追加// 
		一方(J <= R&LT){ 
			TEMP [K ++] = ARR [J ++]; 
		} 
		//元の配列に新しいアレイに割り当てられた番号
		のための(INT X = 0; X <temp.length; X ++){ 
			ARR [L + X] = TEMP [X]; 
			//System.out.print(arr [L + X] + ""); 
		}     
	} 
}

6.ヒープソート

例えば、ヒープのトップに:(素晴らしいアイデア)

ヒープ調整(heapify) 親ノードの最大値、Ruoguoない、交換、及び再帰ノード交換調整後。ヒープ要素保証最大のトップへ。

内蔵ヒープ:最後の非リーフノードから上方調整を行います。

ヒープ(降順):最大位置を確保する大きなトップスタックのルートと最後のスイッチングノード、最後のノード。交換は、ヒープを行っていなかったので、それを行う必要性が再びルートノードからheapifyので。

第二のパス、各ノード現在のノードと最後の交換の現在位置、.....逐次

実装:

Heap_Bigクラス{パブリック
	//バイトおよび大型のスタックの各最上位ノードの左右の点にそれ自身を確立する
	パブリック静的ボイドheapify {(INT []ツリー、N-INT、IをINT)
		IF(I> = N-)
			のリターン; 
		INT C1 = 2 * I + 1; 
		INT C2 = 2 * I + 2、
		INT最大= I; 
		IF(C1 <N - &&ツリー[最大] <ツリー[C1])
			最大= C1;	 
		IF(N C2 < - &&ツリー[マックス<ツリー[C2])
			最大= C2; 
		IF(MAX = I){!
			スワップ(木、MAX、I); 
			heapify(木、N-、MAX); //再帰大きなスイッチングノード終了後のトップペアを確立しますヒープ
		} 
	} 

	プライベート静的ボイドスワップ(INT []ツリー、IはINT、INT J){ 
		int型ツリーTEMP = [I]は、
		ツリー[I] =ツリー[J]; 
		ツリー[J] = TEMP; 
	} 
	
	//のグループヒープ上の多数の確立 
	パブリック静的ボイドbuild_heap (INT []木、int型N ){ 
		INT 1-N-last_nodeを=; 
		int型の親=(-last_node 1)/ 2; 
		(; I> = 0; I =親int型I - )のために{ 
			heapify (木、N-、I); 
		} 
	} 
	
	//ヒープソート:ルートとトップの大きなヒープ最後のスイッチングノード、最大位置を確保する最後のノードは、
	//交換ので、完全なスタックではないのでルートノードから再び我々は、スイッチングノードと最後電流,.の現在位置上の各ノード、第二の通過heapifyを行う必要があり
	、パブリック静的ボイドheap_sort(INT []ツリー、N-INT){ 
		; build_heap(木、N-)
		(INT用= 1-N-I; I> = 0; I - ){ 
			スワップ(木、I、0); 
			heapify(木、I、0); 
		} 
	} 
        パブリック静的無効メイン(文字列[] args){ 
		INT [] } = {4,10,5,3,1,2配列; 
		intは= Array.lengthとn型である; 
		heapify(アレイ、N-、0); 
		のSystem.out.println( "heapifyプロセス:")。
		以下のために(; iがn <; I = 0 int型私は++){ 
			System.out.print(配列[I] +」「)。 
		}

		System.out.println(); 
		build_heap(アレイ、N)。
		System.out.println( "建堆的过程:"); 
		以下のために(; iがn <; I = 0 int型私は++){ 
			System.out.print(配列[I] +」「)。
		} 
		
		のSystem.out.println(); 
		heap_sort(アレイ、N)。
		System.out.println( "堆排序的结果"); 
		以下のために(; iがn <; I = 0 int型私は++){ 
			System.out.print(配列[I] +」「)。
		} 
	} 
}

 

//小顶堆
パブリッククラスHeap_Small {
//小顶堆调整的过程 パブリック静的ボイドheapify2(INT []木、int型のn、iはINT){ IF(I> = n)の リターン; int型C1 = 2 * I 1。 INT、C2 = 2 * I + 2。 int型の分= I; IF(C1 <N &&ツリー[C1] <ツリー[分]) 分= C1。 IF(C2 <N &&ツリー[C2] <ツリー[分]) 分= C2。 IF(!分= I){ スワップ(木、分、I)。 heapify2(木、N、分)。 } } プライベート静的ボイドスワップ(INT []木、int型I、int型のJ){ int型のTEMP =ツリー[I]。 ツリー[I] =木[J]。 ツリー[J] = TEMP; }
//从一组数中建小顶堆 パブリック静的ボイドbuild_heap2(INT []木、INT n)が{堆 INT lastnode = N-1; intは= PAR(-lastnode 1)/ 2; //非リーフノードの最後の調整から開始 (; I> = 0; I = PARをint型I - )のために{ heapify2(木、N- 、I); } } パブリック静的ボイドheap_sort_small(INT []ツリー、N-INT){ build_heap2(木、N-); //交換スタックの上部と現在のスタックの最後の要素、最小位置におけるその最後の要素を確実にするために、結果はそうheapifyことが、小さな山の頂上の後に交換されていないので 第//パス、スタックの最上位要素と現在の最後の要素を交換し、heapify 。(INTのための1-N- = I; I> = 0; I- - ){ スワップ(木、0、I); heapify2(木、I、0); } }
//トップ小さな挿入スタック パブリック静的ボイドheapInsertを([]木、N-INT、INT NUMをINT){ 私は、int型J; I = N; J =(N - 1)/ 2; 一方(J> = 0 && I!= 0){ IF(ツリー[J] <= NUM) BREAK; ツリー[I] =ツリー[J] ; J = I; INT [] = {10、30、20は、100配列2、40、50,14}。 J =(1-I)/ 2; } ;木は、[I]はNUM = }
//テスト {公共の静的な無効メイン(文字列[] args)を INT []配列10,4,5,3,1,2 = {}; intは= Array.lengthとn型である; build_heap2を(アレイ、N-); // heapify2(アレイ、N-、0); のSystem.out.println( "スタックの構築プロセス:"); //スタックが構築されている:2. 3. 1. 5 10 4 のために(INT I = 0、I <N - 、Iは++){ System.out.print(配列[I] + "")の; } のSystem.out.println(); heap_sort_small(アレイ、N-); // heapify2(アレイ、N-、0) ; のSystem.out.printlnは( "ヒープソート結果が"); //スタックが構築されます。2. 3. 1. 5 10 4 のために(INT I = 0、I <N - 、Iは++){ System.out.printの(配列[I] + ""); } のSystem.out.println(); heapInsert(array2,6,14)。 System.out.println( "スタックの上部は少数に挿入される"); //スタックが構築されている:2. 3. 1. 5 10 4 (I = 0 int型; Iはarray2.lengthを<; Iは++){ため のSystem.outを.PRINT(配列2 [I] + ""); } } }

7.シェルソート

考えました:

   1.シェルソート挿入ソートを改善することです。

   2.各挿入ソートのために、最初のグループ(パケットロジック)、各チームの複数に大きなデータセット。

実装:

{クラスシェルソート公共
	のpublic static無効メイン(文字列[] args){ 
		INT [] = {3,5,2,7,4,8,3,9} ARR、
		シェルソート(ARR); 
		(I int型= 0。 I <arr.length; {I ++)
			; System.out.print(ARR [I]は+ "")の
		} 
	} 
	パブリック静的ボイドシェルソート(INT [] ARR){ 
		INT = N-arr.length; 
		//パケットの先頭にアレイの半分の長さの増分
		のために(INT N-GAP = / 2; GAP> 0; GAP / = 2){ 
			//パケットが挿入される
			ため(I = GAPをint型; Iは、N <; Iは++){ 
				// ARR [I]は正しい位置に
				挿入(ARR、GAP、I); 
			} 
		} 
	} 
	
	プライベート静的ボイド挿入{(INT [] ARR、int型のGAP、I INT)
		; = ARR [I] int値を
		INT J; 
		} 
		ARR [J GAP +] =値。 
		のために( J =ギャップ; J> = 0 &&値<ARR [J]; J- =ギャップ){
			ARR [J +ギャップ] = ARR [J]。
	} 
}

 

 

8.基数ソート



9.バケットソート

おすすめ

転載: www.cnblogs.com/yaogungeduo/p/11244277.html