1。アルゴリズムの説明
ソートを選択します。たとえば、長さnの順序付けられていない配列、最初の旅行でnデータをトラバースし、最小値を見つけて最初の要素と交換し、2番目の旅行は残りのN-1データをトラバースし、2番目の要素と交換します...
次の5つの順序データが例として使用されます。
56 12 80 91 20(最初の旅行の選択プロセスは記事でのみ洗練されています)
最初の旅行:12 56 80 91 20
2回目の旅行:12 20 80 91 56
旅行3:12 20 56 91 80
4回目の旅行:12 20 56 80 91
2。アルゴリズム分析
平均時間の複雑さ:o(n2)
スペースの複雑さ:o(1)(交換インデックスとレコードインデックス用)
安定性:不安定(例えば、最初の[5]と[3]はシーケンスの最初の旅行[5、5、3]で交換され、最初の5は2番目の5の後ろに移動します)
3。アルゴリズムの実装
public class selectionsort {public static void main(string [] args){int len = 15; int [] ary = new int [len]; RANDOM RANDOM = new Random(); for(int j = 0; j <len; j ++){ary [j] = random.nextint(1000); } system.out.println( "---------------"); // ary = new int [] {10,9,8,7,6,5,4,3,2,1}; //テスト交換// ary = new int [] {1,2,3,4,5,6,7,8,10,9}; //(int j = 0; j <ary.length; j ++){system.out.print(ary [j]+""); } selectdesc(ary); sefercasc(ary); }/ * * select sort:descending */static void selectdesc(int [] ary){int comparecount = 0; // compare times int changecount = 0; //交換数int len = ary.length; int maxvalueindex = -1; //(int i = 0; i <len -1; i ++){maxvalueindex = i; // 0から(int j = i+1; j <len; j ++){if(ary [maxvalueindex] <ary [j]){maxvalueindex = j; //より大きなインデックスCompareCount ++を記録します。 }} // system.out.println( "minvalueindex ==" + maxvalueIndex); if(maxValueIndex!= i){//インデックスが左のレコードと異なる場合、exchange ary [i] = ary [maxvalueindex]+(ary [maxvalueindex] = ary [i]) * 0; // one-step Exchange changecount ++; }} System.out.println("/n------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (int i = 0; i <1; i ++){minindex = i; ary [minindex]+(minindex] = ary [i] * 0; System.out.println("/n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- compareCount + ", number of exchanges" + changeCount); for(int j = 0; j <ary.length; j ++){system.out.print(ary [j]+""); }}}印刷
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------