选择排序
思想:假定数组的第一个数为最小值,依次和和后面的数比较,
找到最小值的小标和值 ,然后和该数组的第(1,2,3…n)位交换
然后通过循环最终得到有序数组,思想很重要吧
package com.wuzhixin.datastructrue;
import java.util.Arrays;
/**
* 吴志新
* 2019/9/3-9:55
* _23designpatterns
**/
public class SelectSort {
public static void main(String[] args) {
int arr[] = new int[]{101,34,119,1,222,23,14,66};
selectSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectSort(int arr[]) {
int index = 0;
for (int j = 0; j < arr.length-1; j++) { //length-1是因为最后两个比较后就是有序的
boolean flag= false;//判断如果没有执行(min>arr[i])则这个数就是最小的
int min = arr[j]; //每当遍历完一遍后 ,假设最小值就是 第一个元素
//当这个for循环完成后,就找到最小值的下标和值
for (int i = j+1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
index = i;
flag=true;
}
if(flag==false){ //如果一次都不比后面的数大,就记录自己的小标,自己和自己交换
min=arr[j];
index= j; //记录自己的下标
flag=true;
}
}
//直接交换位置
int temp = arr[j];
arr[j] = min;
arr[index] = temp;
}
}
}
T(n = O(n^2