排序(二):选择排序法

前言:有时候,我会觉得,凡事只要有个目标,便可以朝着它努力,这样必定会有结果;可是,慢慢的我发现,在生活中,太多的我们追求的事情,是没有目标的,这也正是我现阶段困惑的东西,我只能一步步的去试探,试图发现个规律。
虽然没有明确的目标,但是我还是要继续加油,对吧?

基本思想:

在排序的一组数中,选出最小的数与第一个数互换,如果本身就是则保持原位,接着再重剩下的数中选出最小的数与第二个数互换,直到最后两个数为止。

大概流程图如图所示:
选择排序

java代码实现:

import java.util.Scanner;

public class SelectSort {

    public static void main(String[] args) {
        int[] numbers = new int[5];
        Scanner scanner = new Scanner(System.in);
        for(int i=0;i<numbers.length;i++){
          numbers[i] = scanner.nextInt();
        }
        selectSort(numbers);
        for(int j =0;j<numbers.length;j++){
            System.out.print(numbers[j]+",");
        }
    }
public static void selectSort(int[] numbers){
    int size = numbers.length;
    int temp = 0;
    for(int i =0;i<size-1;i++){
        int k = i;
        for(int j=size-1;j>i;j--){
            if(numbers[j]<numbers[k]){
                k = j;
            }
        }
        temp = numbers[i];
        numbers[i] = numbers[k];
        numbers[k]= temp;
    }
  }
}

举例运行:
输入:9,4,8,3,6
输出:3,4,6,8,9

时间复杂度O(n*n) 性能上优于冒泡排序 交换次数少
因为冒泡排序法每次循环都要判断是否较大(较小)然后进行交换,而选择排序法则只需选中最小的数与第一个数进行交换,循环下去,所以节省了许多交换次数。

我们可以看下有人做出的时间计算数据:

这里写图片描述

这里写图片描述

从图中我们可以看出:当数组长度到达一定数目,冒泡排序的性能明显低于选择排序。

猜你喜欢

转载自blog.csdn.net/weixin_38364803/article/details/79845614
今日推荐