1、选择排序算法的介绍
选择排序是一种简单直观的排序算法,其基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,直到进行比较的记录只剩下一个为止。到此整个序列就已经是有序序列了。
2、选择排序算法的特点
从简单选择排序的过程来看,它最大的特点是交换移动数据次数相当少,这样就节约了相应的时间。分析它的时间复杂度发现,无论是最好最差情况,其比较次数都是一样多,第 i 趟排序需要进行 n-i 次关键字比较,此时需要比较次,对于交换次数而言,当最好的时候,交换0次,最差的时候,也就是初始降时,交换次数为 n-1 次,基于最终的时间排序与交换次数总和,因此,总的时间复杂度依然为O(n*n),但简单选择排序的性能要优于冒泡排序。
3、选择排序算法的代码实现
1 package com.baozi.paixu; 2 3 import java.util.Arrays; 4 5 /** 6 * 选择排序算法: 7 * 将数组分为两部分,前边一部分时已经排序好的,后面是没有排序的,从后端未排序的部分选择一个最小值, 8 * 然后放在前端已经排序部分的最后 9 * 10 * @author BaoZi 11 * @create 2019-05-15-15:39 12 */ 13 public class SelSort { 14 public static void main(String[] args) { 15 final int MAX = 15; 16 int[] nums = new int[MAX]; 17 System.out.println("...............使用的是选择排序算法..............."); 18 for (int i = 0; i < MAX; i++) { 19 nums[i] = (int) (Math.random() * 10 + 5); 20 } 21 System.out.println("排序之前的数组为..............."); 22 System.out.println(Arrays.toString(nums)); 23 System.out.println("排序之后的数组为..............."); 24 //使用选择排序算法进行排序: 25 SelSort.selSort(nums); 26 System.out.println(Arrays.toString(nums)); 27 } 28 29 public static void selSort(int[] nums) { 30 int length = nums.length; 31 //需要进行n-1次循环比较,用于确定第0、1、2.....n-1个位置上的元素值 32 for (int i = 0; i < length - 1; i++) { 33 //变量temp_index用于记录当前位置的最小元素坐标,初始值赋值为i 34 int temp_index = i; 35 //选出当前位置之后的所有元素中最小的元素,循环结束temp_index中存放的就是当前最小元素的下标 36 for (int j = i + 1; j < length; j++) { 37 if (nums[j] < nums[temp_index]) { 38 temp_index = j; 39 } 40 } 41 //如果最小元素的位置不是i的话,两个元素调换 42 if (temp_index != i) { 43 int temp_num = nums[temp_index]; 44 nums[temp_index] = nums[i]; 45 nums[i] = temp_num; 46 } 47 } 48 } 49 }