クイックソートメソッドは、主にarrays.sort()を使用して実装します。
バブル法は、トラバーサル配列を使用して比較し、継続的な比較を通じて最小値または最大値を1つずつ通過することです。
選択方法は、配列の最初のデータを最大値または最小値として使用し、比較ループから順序付けられた配列を出力することです。
ソートを挿入することは、配列内のデータを選択し、常に挿入して比較することにより、最終的にソートすることです。
コードコピーは次のとおりです。
パッケージcom.firewolf.sort;
パブリッククラスマイソート{
/**
* @param args
*/
public static void main(string [] args){
int array [] = {45,32,54,12,43,65,11,3,43,6,33,90,44,1,178};
mysort mysort = new MySort();
mysort.insertsort(array);
System.out.print( "sort sort result:");
mysort.printarray(配列);
System.out.println();
mysort.bubblesort(array);
System.out.print( "バブルソート結果:");
mysort.printarray(配列);
mysort.qsort(array);
System.out.println();
System.out.print( "Quick Sort result:");
mysort.printarray(配列);
mysort.shellsort(array);
System.out.println();
system.out.print( "ヒルソート結果:");
mysort.printarray(配列);
mysort.selectsort(array);
System.out.println();
System.out.print( "sort sort result:");
mysort.printarray(配列);
}
/**
* sortを直接挿入します
*基本的なアイデア:以前の(n-1)[n> = 2]数字が既に整っていると仮定して、ソートする数字のセットで、n番目の数値を前の順序で順序付けされた数値に挿入する必要があります。すべてが整理されるまでこのサイクルを繰り返します
*/
public void insertsort(int [] array){
int temp = 0;
for(int i = 1; i <array.length; i ++){
int j = i-1;
temp = array [i];
for(; j> = 0 && temp <array [j]; j-){
配列[j+1] =配列[j];
}
配列[j+1] = temp;
}
}
/**
*バブルソート
*基本的なアイデア:ソートする数字のセットで、上から下への2つの隣接する数値を比較および調整して、沈むためにより大きな数値を作成し、小さなものを上げます。つまり、2つの隣接する数値が比較され、ソートがソート要件とは反対であることがわかったときはいつでも、それらは交換されています。
*/
public void bubblesort(int [] array){
int temp;
for(int i = 0; i <array.length; i ++){//旅行数
for(int j = 0; j <array.length-i-1; j ++){//比較数
if(array [j]> array [j+1]){
temp = array [j];
array [j] = array [j+1];
配列[j+1] = temp;
}
}
}
}
/**
*クイックソート
*基本的なアイデア:通常、最初の要素または最後の要素を選択し、スキャンを介して、ベンチマーク要素よりも小さいシーケンスを分割します。ベンチマーク要素。この時点で、ベンチマーク要素はそれをソートした後の正しい位置であり、2つの分割された部分は同じように再帰的にソートされます。
* @paramアレイ
*/
public void qsort(int array []){
if(array.length> 1){
_QSORT(array、0、array.length-1);
}
}
/**
* 1回の旅行のクイックソート
* @paramアレイ
*/
private void _qsort(int [] array、int low、int high){
if(low <high){
int middle = getmiddle(配列、低、高);
_QSORT(配列、ロー、ミドル1);
_QSORT(配列、中央+1、ハイ);
}
}
/**
*中間値を取得します
*/
private int getmiddle(int [] array、int low、int high){
int tmp = array [low];
while(low <high){
while(low <high && array [high]> = tmp)
高い - ;
array [low] = array [high];
while(low <high && array [low] <= tmp)
low ++;
array [high] = array [low];
}
配列[low] = tmp;
低く戻ります。
}
/**
*単純な選択ソート
*基本的なアイデア:ソートする数字のセットの中で、最小の数字を選択して、最初の位置で数値を交換し、残りの数字の間で2番目の位置で交換し、これにループする最後の数値を最後の数値と比較するまで。
* @paramアレイ
*/
public void selectsort(int [] array){
int position = 0;
for(int i = 0; i <array.length; i ++){
int j = i+1;
位置= i;
int temp = array [i];
for(; j <array.length; j ++){
if(array [j] <temp){
temp = array [j];
位置= j;
}
}
array [position] = array [i];
配列[i] = temp;
}
}
/**
*ヒルソート(最小増分ソート)
*基本的なアイデア:アルゴリズムは、最初に特定の増分d(n/2、nはソートされる数値の数)に従っていくつかのグループにソートされる数値を分割し、各グループに記録されたサブスクリプトはdとは異なります。各グループについて、すべての要素が直接ソートされ、より少ない増分(d/2)でグループ化され、各グループで直接ソートされます。増分が1に減少すると、直接挿入ソートが実行された後、ソートが完了します。
* @paramアレイ
*/
public void shellsort(int [] array){
double d1 = array.length;
int temp = 0;
while(true){
d1 = math.ceil(d1/2);
int d =(int)d1;
for(int x = 0; x <d; x ++){
for(int i = x+d; i <array.length; i+= d){
int j = id;
temp = array [i];
for(; j> = 0 && temp <array [j]; j- = d){
配列[j+d] = array [j];
}
配列[j+d] = temp;
}
}
if(d == 1)
壊す;
}
}
/**
*配列内のすべての要素を印刷します
*/
public void printarray(int [] array){
for(int i = 0; i <array.length; i ++){
System.out.print(array [i]+"");
}
}
}
以下は、別々に使用されるソートメソッドの例をいくつか紹介します
配列を使用したソートメソッドを使用したクイックソート
コードコピーは次のとおりです。
java.util.arraysをインポートします。
パブリッククラスtest2 {
public static void main(string [] args){
int [] a = {5,4,2,4,9,1};
arrays.sort(a);
for(int i:a){
System.out.print(i);
}
}
}
バブルソーティングアルゴリズム
コードコピーは次のとおりです。
public static int [] bubblesort(int [] args){//バブルソートアルゴリズム
for(int i = 0; i <args.length-1; i ++){
for(int j = i+1; j <args.length; j ++){
if(args [i]> args [j]){
int temp = args [i];
args [i] = args [j];
args [j] = temp;
}
}
}
argsを返します。
}
ソートアルゴリズムを選択します
コードコピーは次のとおりです。
public static int [] selectsort(int [] args){//並べ替えアルゴリズムを選択します
for(int i = 0; i <args.length-1; i ++){
int min = i;
for(int j = i+1; j <args.length; j ++){
if(args [min]> args [j]){
min = j;
}
}
if(min!= i){
int temp = args [i];
args [i] = args [min];
args [min] = temp;
}
}
argsを返します。
}
ソートアルゴリズムを挿入します
コードコピーは次のとおりです。
public static int [] insertsort(int [] args){//ソートアルゴリズムを挿入します
for(int i = 1; i <args.length; i ++){
for(int j = i; j> 0; j-){
if(args [j] <args [j-1]){
int temp = args [j-1];
args [j-1] = args [j];
args [j] = temp;
} else break;
}
}
argsを返します。
}
上記は、Javaの4つの並べ替え方法です。さまざまな効率があります。以下は、異なるアルゴリズムの比較と、データ交換中の大規模なO表現です。
バブルソート:比較O(N2)データ交換O(N2)
ソートを選択します:O(n2)データ交換O(n)を比較します
ソートを挿入:O(n2)を比較してデータをコピーしますo(n)
実際のアプリケーションでは、効率的なアルゴリズムを選択してみる必要があります。