选择排序算法

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 }

 

转载于:https://www.cnblogs.com/BaoZiY/p/10931082.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值