• 选择排序(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;
    
        }
    }
  • 相关阅读:
    UI: Form editor && use CRectTracker to allow user drag/move/resize graphics
    如何设置共享文件夹
    log4net每天生成一个log文件
    自动属性/匿名方法/Lamda表达式
    ASPOSE.CELL
    转载:动态调用WebService(C#)
    按钮Button动态事件的名称
    ASPOE.WORD
    操作MSSQL服务还有测试是否连接
    操作MSSQL服务还有测试是否连接1
  • 原文地址:https://www.cnblogs.com/aston/p/8099401.html
Copyright © 2020-2023  润新知