前言
和冒泡排序一样,这个也是简单而必须掌握的基础排序算法。
原理
遍历数组每个元素,若为升序,则寻找最小的数与第一个数交换,一趟排序结束后,最小的数位于数组第一个位置,然后在2-n个数中,寻找最小的元素放在第二个位置,往复下去,排序结束。
时间复杂度
固定:n*n
代码
public class SelectSort { //选择排序 //做N趟排序,每一趟选择最小的数与前面的交换 //时间复杂度 固定的 n*n public static void main(String[] args) { int[] arr={1,3,2,45,65,33,12}; System.out.println("交换之前:"); for(int num:arr){ System.out.print(num+" "); } //选择排序的优化 for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序 int k = i; for(int j = k + 1; j < arr.length; j++){// 选最小的记录 if(arr[j] < arr[k]){ k = j; //记下目前找到的最小值所在的位置 } } //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换 if(i != k){ //交换a[i]和a[k] int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } System.out.println(); System.out.println("交换后:"); for(int num:arr){ System.out.print(num+" "); } } }
下一篇:插入排序
入口在此:点我学习插入排序