1.基本はじめに
選択ソート方法はまた、要素を選択し、その後、交換後の所定位置の目的に応じてソートさで指定された規則に従って、ソートされるべきデータから、内部順序に属します。
2.並べ替えのアイデアを選択
選択ソート(並べ替え選択)も、並べ替えの簡単な方法です。[0] ARRからの第1:基本的な考え方は、[N-1] ARRから最小値、およびARR [0]交換、第二の時間ARR [1]を選択ARR [N-1]最小のARR〔1〕交換と、第三の[2]のARRから選択された最小値、およびARR [2]交換、...、iはARRのより番目[1-N-]はARR [1-i]の ARR [N- 1]最小値、およびARR [I-1]の交換、...、N-1回[N-2]〜[ARR選択 N-1] ARR [N-2]交換と選択された最小値ARRからの昇順にソートされたシンボルの順序付けられたシーケンスを得るためのn 1倍による総。
3.ソートのアイデア分析を選択します
3.1アイデアのイラスト
説明:
- ソート - ソート合計配列のサイズを選択
- 各ソートは、ルール(コード)はループである
2.1は、最初は現在の数が最小数であることを前提と
再定義し、現在の数よりも少ない数が存在する場合、2.2およびそれ以降の各番号が比較されます最小数、及び添字与える
最終的なアレイを横断するとき2.3、得られるラウンド添字の最小数
2.4交換
3.2コードの実装
package cn.smallmartial.sort;
import java.util.Arrays;
/**
* @Author smallmartial
* @Date 2019/6/6
* @Email [email protected]
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {101, 34, 119, 1};
System.out.println("排序前:"+Arrays.toString(arr));
selectSort(arr);
}
//选择排序
public static void selectSort(int[] arr){
//使用嵌套循环
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min >arr[j]){
min = arr[j];
minIndex = j;
}
}
//将最小值,放到arr[0],即交换
if(minIndex != i){
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println("第"+(i+1)+"轮:");
System.out.println(Arrays.toString(arr));
}
//逐步推导
int minIndex = 0;
int min = arr[0];
for (int j = 0 + 1; j < arr.length; j++) {
if (min >arr[j]){
min = arr[j];
minIndex = j;
}
}
//将最小值,放到arr[0],即交换
if(minIndex != 0){
arr[minIndex] = arr[0];
arr[0] = min;
}
System.out.println("第一轮:");
System.out.println(Arrays.toString(arr));
//第二轮
minIndex = 1;
min = arr[1];
for (int j = 1 + 1; j < arr.length; j++) {
if (min >arr[j]){
min = arr[j];
minIndex = j;
}
}
//将最小值,放到arr[0],即交换
if(minIndex != 1){
arr[minIndex] = arr[1];
arr[1] = min;
}
System.out.println("第二轮:");
System.out.println(Arrays.toString(arr));
//第三轮
minIndex = 2;
min = arr[2];
for (int j = 2 + 1; j < arr.length; j++) {
if (min >arr[j]){
min = arr[j];
minIndex = j;
}
}
//将最小值,放到arr[0],即交换
if(minIndex !=2){
arr[minIndex] = arr[2];
arr[2] = min;
}
System.out.println("第二轮:");
System.out.println(Arrays.toString(arr));
}
}
結果:
3.3テスト8万データ
public static void main(String[] args) {
//int[] arr = {101, 34, 119, 1};
int[] arr = new int[80000];
for (int i = 0; i < arr.length -1 ; i++) {
arr[i] = (int)(Math.random()*80000);
}
System.out.println("排序前");
// System.out.println("排序前:"+Arrays.toString(arr));
Date data = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dataStr = simpleDateFormat.format(data);
System.out.println("排序前的时间"+dataStr);
selectSort(arr);
System.out.println("排序后");
//System.out.println("排序后:"+Arrays.toString(arr));
Date data2 = new Date();
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String data2Str = simpleDateFormat.format(data2);
System.out.println("排序前的时间"+data2Str);
}
業績;
ます。https://www.jianshu.com/p/2876d74288bdで再現