この記事では、Javaが一般的に使用される8つのソートアルゴリズムをどのように達成するかを紹介します。ソートの挿入、ソーティングの選択、速い選別、合併並べ替え、スタッキング順序、LSTベースのソートを共有します。
分類
1)ソートを挿入します(直接挿入された並べ替え、丘の並べ替え)
2)交換ソート(バブリングソート、高速ソート)
3)ソートを選択します(ソート、積み重ねられた並べ替えを直接選択します)
4)並べ替えをマージします
5)配布とソート(ベースソート)
必要な補助スペースが最も多く、合併と選別のための最も補助空間:スタッキング順序の最速のテレバリー速度:高速ソート
不安定:すばやく並べ替え、丘の並べ替え、積み重ねられたソート。
8ソートの関係を見てみましょう。
1.ソートを直接挿入します
(1)基本的なアイデア:(n-1)[n> = 2]数字がすでに行われていると仮定するセットの中で
順番に、NN番号が前の注文に挿入され、このn番号が
それも順調です。これは、順序全体が順調になるまで繰り返し循環します。
(2)例
(3)Javaで実現します
パッケージcom.njue; publicclass insertsort {inta [] = {49,65,97,76,49,78,34,5,4,62,99、98,54,56、 17,18,23,34,15,35,53,51}; temp = a [i]; test;} for(int i = 0; i <a.length; i ++){system.out.println(a [i]);}}}}}}}2。ヒルソート(最小増分並べ替え)
(1)基本的なアイデア:アルゴリズムによってソートされるグループの数は、d(n/2、nがソートされる数字として)に応じていくつかのグループに分けられますソートしてから、より小さな増加(d/2)を使用してグループ化し、各グループにソートを直接挿入します。増分が1に減少すると、ソートが直接挿入され、ソートが完了します。
(2)例:
(3)Javaで実現します
publicClass shellsort {int a [] = {1,78,34,45,56,100}; .ceil(d1/2); int d1; ){int j = id; j+d] = temp;}} if(d == 1){break;} for(int i = 0; i <a.length; i ++){system.out.println(a [i]);} }}3。ソートの簡単な選択
(1)基本的なアイデア:ソートするグループで、数字の数と最初の位置を選択します。
次に、残りの数値で2番目の位置の最小数を見つけて、ループが最後の数と最後の数字の最後の数と比較されるようにします。
(2)例:
(3)Javaで実現します
public class selectsort {int a [] = {1,54,38,34,12,45}; ){int j = i+1; j]; pose = j;}} a [i] = test;}私] );}}4。ヒープソート
(1)基本的なアイデア:パッキングソートは、並べ替えのツリー型の選択であり、ソートの直接選択の効果的な改善です。
ヒープの定義は次のとおりです。N要素を持つシーケンス(H1、H2、...、HN)、および満足している(hi> = h2i、hi> = 2i+1)または(hi <= h2i、 hi <= 2i 2i)+1)(i = 1,2、...、n/2)はパイルと呼ばれます。ここでは、前者の条件を満たす山についてのみ説明します。ヒープの定義から、上部要素(つまり、最初の要素)が最大のアイテム(大きなトップダンプ)でなければならないことがわかります。完全なバイナリツリーは、ヒープの構造を直感的に表すことができます。山の上部は根が張られており、他のものはサブツリーと右サブツリーのままです。当初、ソートされるシーケンスは、順番に保存されたバイナリツリーと見なされ、ストレージ順序を調整して山になるようにします。次に、ヒープの最後のノードとルートノードを交換します。次に、前の(n-1)数を再調整して、杭にします。このタイプによれば、2つのノードしかなく、それらを交換し、最後にnノードの整然としたシーケンスを取得します。アルゴリズムの説明の観点から、スタッキングシーケンスには2つのプロセスが必要です。もう1つは、上部とパイルの最後の要素交換位置です。したがって、ヒープソートの2つの関数構成があります。 1つはパイルの浸透関数であり、もう1つは浸潤関数を繰り返し呼び出してソート機能を実装することです。
(2)例:
初期シーケンス:46,79,56,38,40,84
工事:
交換、山から最大数を蹴ります
残りのノードが再び構築され、最大数が交換されます
順番にプッシュ:最後の2つのノードの最後のパイルの最後の2つのノードが交換され、1つがキックアウトされ、ソートが完了します。
(3)Javaで実現します
Java.util.arraysをインポートします、15,35,25,53,51}; public heapsort(){heapsort(a);} public void heapsort(int [] a)長さ;/内蔵(int i = 0; i <arraylength-; i ++){// buildmaxheap(a、arraylength-i); 0、arraylength-i); goneraltedメソッドint tmp = data [i] = data [j] = tmp;} // ){// todo auto-gonementメソッドスタブ// lastinindexのノードの親ノード(lastindex-); i> = 0; i-){// kノードを保存しますint k = i; BiggerIndexはLastIndexよりも小さく、つまり、BiggerIndex+1で表されるKノードを表すKノードの右ノードが存在する場合(BiggerIndex <lastIndex){//右ノードの値が大きい場合(データ[BiggerIndex ] <data [bigggerindex+1]){// bigggerindexは常にインデックスを記録するbiggerindex ++;} // kノードの値がkノードの値よりも小さい場合if(data [data [data k k ] <data [bigggerindex]){// swap(data、k、biggerindex);左と右のノードの値より。5。バブルソート
(1)基本的なアイデア:ソートされるグループでは、まだ排出されていないスコープ内のすべての数値が、上から下に隣接する2つの2つの数値を比較と調整して、大きいものがいくつか沈むようにします。つまり、2つの隣接する数値を比較すると、並べ替えと並べ替えの要件が反対であり、交換することがわかります。
(2)例:
(3)Javaで実現します
public class Bubblesort {publicBitsort(){inta [] = {49,38,65,97,76,13,49,78,34,5,4,62,98,54,54,56、17,18,2334,5,4,62,98,54,54,56 、34,15,35,25,53,51}; length-1-i; +1] = temp;}}} for(int i = 0; i <a.length; i ++){system.out.println(a [i]);}}}6.すばやく並べ替えます
(1)基本的なアイデア:ベンチマーク要素を選択します。通常、最初の要素または最後の要素を選択します。ベンチマーク要素。この時点で、要素がランク付けされた後、2つの部分がソートされます。
(2)例:
(3)Javaで実現します
PublicClass QuickSort {inta [] = {49,38,65,97,76,13,27,78,34,264,5,4,99,98,54,56,17,18 23,34,15,35,25 、53,51}; publicquicksort(){a); [] list、int low){int tmp = list [low]; high-;} list [low] = list [high]; [high] = low [low]; int low、int high){low <high){int middle = getmiddle(low、high); Low -Character Tables_Quicksortのソート(リスト、ミドル + 1、ハイ);配列はempty_quicksort(a2,0、a2.length -1);}}}}7。マージソート
(1)基本的なソート:添付ファイル(マージ)ソートメソッドは、2つ(またはそれ以上)以上のフォームを序文、つまり序文にマージすることです。次に、順序シーケンスを全体的な順序に結合します。
(2)例:
(3)Javaで実現します
Java.util.arraysをインポートします、15,35,25,53,51}; (a [i]);} publicVoid sort(int [] data、int left、int右){// todo-goneraltedmethodスタブif(左<右){ / / /中間インデックスint center =(左+右+右) // //左配列の再帰的なソート(左、中央)。 ;}} publicVoid Merge(int [] data、int left、int right){// todo-goneorates int [data.length];ミドルアレイintプロジェクト= left; ){tmparr [third ++] = data [left ++];} else {tmparr [third ++] = data [mid ++]; ++];} while(left <= center){tmparr [third ++] = data [left ++]; println(arrays.toString(data));8。ベースソート
(1)基本的なアイデア:すべての比較値(正の整数)を同じ数の長さまで均一に、短桁の数はゼロの前に構成されます。次に、最低位置から始めて順番に並べ替えます。これは、最も低い位置から最高のビットソートまでの整然としたシーケンスになります。
(2)例:
(3)Javaで実現します
Import Java.util.ArrayList; 、54,101,56,17,18,34,15,35,53,51}; {system.out.println(a [i]);}} public void sort(int [] array) <array.length; i ++){if(array [i]> max = array [i];}} int time = 0; // judgement bit; while(max> 0){max/ = 10; Time ++;} // 10のキューを作成します<ArrayList> Queue = aryList>(); ins>(); Queue1);} <配列; j ++; int)pow(10、i 10、i); 0; = queue.get(k)= queue3.get(0);上記は、この記事のすべての内容です。