1。概要
選択的ソートとは何ですか?
アイデア:各パスは、並べ替えるレコードから最小の要素を選択して並べ替えられたシーケンスの最後に配置し、次に残りのシーケンスから最小の要素を選択して、シーケンス全体がソート済み。
注意点:
①比較パスの数:シーケンスは2番目の要素から始まり、最初の要素と比較され、最後の要素が2番目の要素と比較されます。たとえば、1、3、2 1と3が比較され、1と2が比較され、最初の比較ラウンドが終了します。3が2と再度比較され、位置が交換され、2番目の比較ラウンドが終了します。したがって、シーケンス比較全体のパス数はn-1であり、nはarr.lengthです。
②内側のループは、配列の2番目の要素から最後の要素まで始まります
2.グラフィック
3.コードの実装
import java.util.Arrays;
/**
* 选择排序
* @author Administrator
*
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {2,1,4,3};
selectionSort(arr);
for(int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
}
private static void selectionSort(int[] array) {
// 选择排序的躺数 因为是两两比较的,比如1,3,2 3先和1比较,1最小,1再和2比较第一趟结束;然后3再和2比较;所以是2次
for(int i = 0;i < array.length - 1;i++) {
// 设置最小元素下标
int minIndex = i;
// 从第二个元素开始往后
for(int j = i + 1;j < array.length;j++) {
if(array[minIndex] > array[j]) {
minIndex = j;
}
}
// 一次比较结束 内层for循环已经出现比较的结果
// 交换位置
if(minIndex != i) {
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
}
}
4.時間計算量分析
2つのforループ、時間計算量が実行するのに最悪の回数、O(n2)