zoukankan      html  css  js  c++  java
  • 排序系列 之 简单选择排序及其改进算法 —— Java实现

     简单选择排序算法:

     基本思想:

      在待排序数据中,选出最小的一个数与第一个位置的数交换;然后在剩下的数中选出最小的数与第二个数交换;依次类推,直至循环到只剩下两个数进行比较为止。

     实例:

      0.初始状态 3,1,5,7,2,4,9,6(共8个数)

      1.n=8 个数中,最小数值为1,与第一个数交换:1,3,5,7,2,4,9,6

      2.剩下 n-1=7 个数中,最小数值为2,与第二个数交换:1,2,5,7,3,4,9,6

      3.剩下 n-2=6 个数中,最小数值为3,与第三个数交换:1,2,3,7,5,4,9,6

      4.剩下 n-3=5 个数中,最小数值为4,与第四个数交换:1,2,3,4,5,7,9,6

      5.剩下 n-4=4 个数中,最小数值为5,与第五个数交换:1,2,3,4,5,7,9,6

      6.剩下 n-5=3 个数中,最小数值为6,与第五个数交换:1,2,3,4,5,6,9,7

      7.剩下 n-6=2 个数中,最小数值为7,与第五个数交换:1,2,3,4,5,6,7,9


      简单选择排序算法的改进:

     基本思想:

      简单选择排序算法,每次只选择一个数据放在正确的位置,为提高效率,可每次选择两个数据,放在正确的位置,及每次选择最大值和最小值。

     实例:

      0.初始状态 3,1,5,7,2,4,9,6(共8个数)

      1.n=8 个数中,最小数值为1,与第一个数交换;最大数值为9,与最后一个数交换:1,3,5,7,2,4,6,9

      2.剩下n-2=6个数中,最小数值为2,与第二个数交换;最大数值为7,与倒数第二个数交换1,2,5,6,3,4,7,9

      3.剩下n-4=4个数中,最小数值为3,与第三个数交换;最大数值为6,与倒数第三个数交换1,2,3,4,5,6,7,9

      4.剩下n-6=2个数中,最小数值为4,与第四个数交换;最大数值为5,与倒数第四个数交换1,2,3,4,5,6,7,9


     Java实现:

    /**
     * 选择排序 及其 改进算法 的实现
     * 不稳定算法
     * @author 那一季的银杏叶
     *
     */
    public class SelectSort {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new SelectSort().run();
        }
        public void run(){
            int a[] = {3,1,5,7,2,4,9,6};
            /**
             * 选择排序
             */
            selectSort(a);
            /**
             * 选择排序的改进--二元选择排序
             */
            selectTwoSort(a);
        }
        /**
         * 选择排序    每次选出最小的元素
         * @param a
         */
        private void selectSort(int[] a) {
            // TODO Auto-generated method stub
            System.out.println("———————————————————选择排序算法———————————————————");
            int n=a.length;
            for(int i=0;i<n;i++){
                int k=i;
                for(int j=i;j<n;j++){
                    if(a[j] < a[k]){
                        k=j;
                    }
                }
                if(k != i){
                    int temp = a[i];
                    a[i]=a[k];
                    a[k] = temp;
                }
                print(a,n,i);
            }
            printResult(a,n);
        }
        /**
         * 选择排序的 改进算法
         * 每次选出最大的数和最小的数
         * @param a
         */
        private void selectTwoSort(int[] a){
            System.out.println("———————————————选择排序算法——的改进—————————————————");
            int n=a.length;
            int i,j,max,min,temp;
            for(i=0;i<n/2;i++){
                max=i;
                min=i;
                for(j = i+1;j<n-i;j++){
                    if(a[j]<a[min]){
                        min=j;
                    }
                    if(a[j]>a[max]){
                        max=j;
                    }
                }
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
                
                temp = a[n-i-1];
                a[n-i-1] = a[max];
                a[max] = temp;
                print(a,n,i);
            }
            printResult(a,n);
        }
        /**
         * 打印排序的最终结果
         * @param a
         * @param n
         */
        private void printResult(int[] a, int n){
            System.out.print("最终排序结果:");
            for(int j=0;j<n;j++){
                System.out.print(" "+a[j]);
            }
            System.out.println();
        }
        /**
         * 打印排序的每次循环的结果
         * @param a
         * @param n
         * @param i
         */
        private void print(int[] a, int n, int i) {
            // TODO Auto-generated method stub
            System.out.print("第"+i+"次:");
            for(int j=0;j<n;j++){
                System.out.print(" "+a[j]);
            }
            System.out.println();
        }
    }

      运行结果展示:

     
      (本文仅供学习交流,如有更好的思路,欢迎留下意见供大家探讨学习~)
     
  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/snowcan/p/6243873.html
Copyright © 2011-2022 走看看