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 BaoZi11 * @create 2019-05-15-15:3912 */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用于记录当前位置的最小元素坐标,初始值赋值为i34 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 }