単純な選択ソート:(最小値を選択し、最初にパットしてから、最初のビットが後方に移動するので、最初のビットは次のビットと比較します。宣伝(つまり、選択した最初の数字は最小値であり、比較に参加しなくなり、比較の数は1増加します)
複雑さ:レコードの動きを実行するために必要な操作の数は0-3(n-1)です。 / 2。合計時間の複雑さはO(n2)です。
宇宙の複雑さo(1)
アルゴリズムの改善:比較するたびに、最初に最小値を配置するために、それを最後に比較し、最小値を見つけ、最初に直接置き、意味のないスイッチングおよび移動操作を排除することができます。また、方向を変更し、最後のビットを前の各ビットと比較し、毎回最大値を底にして、最後のビットを前方に押すこともできます。
Javaソースコード:
コードコピーは次のとおりです。
public static void selectsort(date [] days){
int min;
日付の温度;
for(int i = 0; i <days.length; i ++){
min = i;
for(int j = min+1; j <days.length; j ++){
if(days [min] .compare(days [j])> 0){
min = j;
}
}
if(min!= i){
temp = days [i];
日[i] = days [min];
日[min] =温度;
}
}
}
クラスの日付{
int year、month、day;
日付(int y、int m、int d){
year = y;
月= m;
day = d;
}
public int compare(日付){
return year> year?
:月>月<月<月数?
:day> day:day.day?
}
public void print(){
System.out.println(year + "" + month + "" + day);
}
}
簡単な選択ソート:
単純な選択のソートは、バブルソート(バブルソート)に似ています。唯一の違いは、バブルソーティングが現在の値よりも小さい(またはより大きい)ことがわかるたびに要素の位置を交換することですが、単純な選択ソートは、残りの要素で最も値を選択し、データでデータを交換することです。現在の位置。
たとえば、要素の場合r = {37、40、38、42、461、5、7、9、12}
最初に:37は5と直接交換され、新しいシーケンスr1 = {5,40,38,42,461,37,7,7,9,12}を形成します。
2番目に:40は7と直接交換され、新しいシーケンスR2 = {5,7,38,42,461,37,40,9,12}を形成します。
そのように最後の要素まで(注:2次では、38は42より小さいが、データを交換しない)。
以下は、単にソートを選択するJava実装バージョンです。
コードコピーは次のとおりです。
public static void selectionsort(int [] data){
if(data == null || data.length <= 1)
戻る;
int i、j、value、minpos、len = data.length;
int outer = len -1、tmp;
for(i = 0; i <outer; i ++){
value = data [i];
minpos = -1;
for(j = i+1; j <len; j ++){
if(data [j] <value){
minpos = j;
value = data [j];
}
}
if(minpos!= -1){
tmp = data [i];
data [i] = value;
data [minpos] = tmp;
}
//(int k = 0; k <len; k ++){
// system.out.print(data [k] + "、");
//}
// system.out.println();
}
}
public static void main(string [] args){
int [] coll = {
37、40、38、42、461、5、7、9、12
};
SelectionSort(coll);
for(int i = 0; i <coll.length; i ++){
System.out.print(coll [i] + "、");
}
}
ツリー選択ソート
ツリー選択ソーティングアルゴリズムは、単純な選択ソートと比較して、時間のためにスペースを交換する典型的なアルゴリズムです。アイデアは、ソートされたn要素を処理し、比較的小さく(n+1)/2の数値を構築し、その後、1つの要素が1つしかなくなるまで比較的小さな[n+1]/4の数値を構築することです。完全にバイナリツリーに構築されました。
ソートするとき、要素は最小の要素を取り出し、要素を「最大値」に置き換え、完全なバイナリツリーを調整します。
これは、ツリー選択ソートのJava実装バージョンです。
コードコピーは次のとおりです。
public static void treeselectionSort(int [] data){
if(data == null || data.length <= 1)
戻る;
int len = data.length、low = 0、i、j;
//補助スペースを追加します
int [] tmp = new int [2*len -1];
int tsize = tmp.length;
//ツリーを作成します
for(i = len-1、j = tmp.length-1; i> = 0; i-、j-){
tmp [j] = data [i];
}
for(i = tsize -1; i> 0; i- = 2){
tmp [(i-1)/2] = tmp [i]> tmp [i-1]:tmp [i];
}
//終わり
//最小ノードを削除します。
while(low <len){
data [low ++] = tmp [0];
for(j = tsize-1; tmp [j]!= tmp [0]; j-);
tmp [j] = integer.max_value;
while(j> 0){
if(j%2 == 0){//それが右ノードの場合
tmp [(j-1)/2] = tmp [j]> tmp [j-1]?tmp [j-1]:tmp [j];
j =(j-1)/2;
} else {//左ノードの場合
TMP [J/2] = TMP [J]> TMP [J+1]:TMP [J];
j = j/2;
}
}
}
}
完全なバイナリツリーを構築する場合、N要素のコレクションには2*n -1補助スペースが必要です。
コード:
コードコピーは次のとおりです。
while(j> 0){
if(j%2 == 0){//それが右ノードの場合
tmp [(j-1)/2] = tmp [j]> tmp [j-1]?tmp [j-1]:tmp [j];
j =(j-1)/2;
} else {//左ノードの場合
TMP [J/2] = TMP [J]> TMP [J+1]:TMP [J];
j = j/2;
}
}
次に、新しいセットに最小値の再帰構築を実装します。