zoukankan      html  css  js  c++  java
  • 选择排序(Selection Sort)

      以前写过排序算法,但是主要写的是算法的概念和实现代码,本次主要写下算法的执行过程。

      好了,还是先回忆下概念。选择排序是指每次循环都把剩余数据中最小的(最大的)数找出来,从而在进过多轮循环之后得出有序数据。选择排序的时间复杂度为O(n*n).

      假设有一组数组,{99,67,82,43,12,26,18,55},则其选择从小到大的排序过程如下:

            {99,67,82,43,12,26,18,55}

      第一次循环:{67,99,82,43,12,26,18,55}

            {43,99,82,67,12,26,18,55}

            {12,99,82,67,43,26,18,55}

      第二次循环:{12,99,82,67,43,26,18,55}

            {12,82,99,67,43,26,18,55}

            {12,67,99,82,43,26,18,55}

            {12,43,99,82,67,26,18,55}

            {12,26,99,82,67,43,18,55}

            {12,18,99,82,67,43,26,55}

      第三次循环:{12,18,99,82,67,43,26,55}

            {12,18,82,99,67,43,26,55}

            {12,18,67,99,82,43,26,55}

            {12,18,43,99,82,67,26,55}

            {12,18,26,99,82,67,43,55}

      第四次循环:{12,18,26,99,82,67,43,55}

            {12,18,26,82,99,67,43,55}

            {12,18,26,67,99,82,43,55}

            {12,18,26,43,99,82,67,55}

      第五次循环:{12,18,26,43,99,82,67,55}

            {12,18,26,43,82,99,67,55}

            {12,18,26,43,67,99,82,55}

            {12,18,26,43,55,99,82,67}

      第六次循环:{12,18,26,43,55,99,82,67}

            {12,18,26,43,55,82,99,67}

            {12,18,26,43,55,67,99,82}

      第七次循环:{12,18,26,43,55,67,99,82}

            {12,18,26,43,55,67,82,99}

      第八次循环:{12,18,26,43,55,67,82,99}

      至此,排序完成,可以看出选择排序是不稳定排序。

      下面是选择排序的代码实现:

    public class MainTest {
    
        public static void main(String[] args){
            int[] arr = {10,9,8,7,6,5,4,3,2,1};
            selectingSort(arr);
    
            for (int i : arr){
                System.out.println(i);
            }
        }
    
    
        public static void selectingSort(int[] arr){
            int arrLength = arr.length;
            for (int i=0; i<arrLength; i++){
                int minIndex = i;
                for (int j=i+1; j<arrLength; j++){
                    if (arr[j]<arr[minIndex]){
                        minIndex = j;
                    }
                }
                exchange(arr, i, minIndex);
            }
        }
    
        private static void exchange(int[] arr, int nowIndex, int minIndex){
            int num = arr[nowIndex];
            arr[nowIndex] = arr[minIndex];
            arr[minIndex] = num;
    
        }
    }
  • 相关阅读:
    大话测试数据(一)
    两个小案例
    关于那些难改的bug
    关于测试人员的职业发展
    python中的模块
    python为什么会有@classmethod?
    Javascript oop深入学习笔记(三)--javascript中类的实现
    NODE编程(一)--Node功能的组织和重用
    javascript oop深入学习笔记(二)--javascript的函数
    javascript oop深入学习笔记(一)
  • 原文地址:https://www.cnblogs.com/aston/p/8099401.html
Copyright © 2011-2022 走看看