* 简单选择排序
* 时间复杂度,无论初始序列为顺序、逆序、乱序,都是o(n^2)
* 注意此算法不稳定;即不能保证两个相同大小的元素在排序前后的顺序一致
import java.util.Arrays;
/**
* 简单选择排序
* 时间复杂度,无论初始序列为顺序、逆序、乱序,都是o(n^2)
* 注意此算法不稳定;即不能保证两个相同大小的元素在排序前后的顺序一致
*/
public class SimpleSelectSort {
public static void main(String[] args) {
int[] arr = {49, 38, 65, 97, 76, 13, 27, 49};
simpleSelectSortAsc(arr);
System.out.println(Arrays.toString(arr));
}
public static void simpleSelectSortAsc(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
//从左往右,每次循环确定第i小的数
int minIndex = i; //记录本轮最小值的序号,先默认写i
for (int j = i+1; j < arr.length; j++) {
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
swap(arr,i,minIndex);
}
}
/**
* @param arr
* @param index1
* @param index2
*/
public static void swap(int[] arr,int index1,int index2){
if (index1 == index2){
//自己和自己交换,什么也不用做
return;
}
//玩一下不用tmp变量来完成交换
arr[index1] = arr[index1] + arr[index2];
arr[index2] = arr[index1] - arr[index2];
arr[index1] = arr[index1] - arr[index2];
}
}