zoukankan      html  css  js  c++  java
  • 数据结构-简单选择排序(SelectionSort)

      选择排序:在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

    //选择排序
    public class SelectionSort {
        public static void main(String[] args) {
            int[] arr={1,3,2,45,65,33,12};
            System.out.println("交换之前:");
            for(int num:arr){
                System.out.print(num+" ");
            }        
            //选择排序的优化
            for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
                int k = i;
                for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                    if(arr[j] < arr[k]){ 
                        k = j; //记下目前找到的最小值所在的位置
                    }
                }
                //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
                if(i != k){  //交换a[i]和a[k]
                    int temp = arr[i];
                    arr[i] = arr[k];
                    arr[k] = temp;
                }    
            }
            System.out.println();
            System.out.println("交换后:");
            for(int num:arr){
                System.out.print(num+" ");
            }
        }
    
    }
    

      运行结果截图:

      

      选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) /  2。

      所以,综上,简单排序的时间复杂度为 O(N2)

  • 相关阅读:
    OC闪屏页尺寸
    OC 应用跳转QQ私聊界面或者申请加群
    一款好用的相册浏览器
    获取UILabel的numberOfLine
    一、spring入门案例
    三、为什么要配置环境变量?怎么用cmd编译运行java代码?
    十三、Swing绘图技术
    十二、泛型、反射和异常
    十一、集合框架
    十、二进制、位运算、位移运算符
  • 原文地址:https://www.cnblogs.com/luoshengjie/p/10225063.html
Copyright © 2011-2022 走看看