zoukankan      html  css  js  c++  java
  • 算法一之简单选择排序

    一、  选择排序的思想

          选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序树型选择排序堆排序
          简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

    二、算法实现

    简单算法:

    public void selectionSort(int[] data){
    
           int temp;         //临时空间
    
           //data.length-1趟
           for(int i=0;i<data.length-1;i++){
                  
                for(int j=i+1;j<data.length;j++){
                     //交换,保存最小记录在i空间
                     if(data[i]>data[j]){
                         temp =data[i];
                         data[i]=data[j];
                         data[j]=temp;
                     }
                }  
    
          }
    }

    优化的算法:

    public void selectionSort(int[] data){
    
           int minIndex;     //最小记录下标
           int temp;         //临时空间
    
           //data.length-1趟
           for(int i=0;i<data.length-1;i++){
                //在i到data.length-1中匹配最小记录
                minIndex=i;   //默认最小值为第一个记录         
                for(int j=i+1;j<data.length;j++){
                     //保存最小记录的下标
                     if(data[minIndex]>data[j]){
                         minIndex=j;
                     }
                }  

    //最小记录不在下标i处,互交换数据 if(minIndex!=i){ temp =data[i]; data[i]=data[minIndex]; data[minIndex]=temp; } } }

    三、复杂度

        简单选择排序中,所需进行记录移动的操作次数较少,其最小值为“0”,最大值为3(n-1)。

        最好时间O(n2),最坏时间O(n2),平均时间O(n2)。辅助存储O(1),不稳定,n小时较好。

        然而,无论记录的初始序列如何,所需进行的关键字间的比较次数相同,均为n(n-1)/2,因此,总的时间复杂度为O(n2)

  • 相关阅读:
    Ubuntu Mysql
    Ubuntu配置大全
    MyEclipse 手动安装 Subclipse 插件
    解决 Ubuntu 11.10 在 RTL8111/8168B 网卡下速度慢的问题
    Ubuntu 多硬盘 LVM 方式安装
    关于编码转换
    Ubuntu 安装时(initramfs) Unable to find a medium containing a live file system错误的解决
    关于 DirectShow 中各个例子的编译转换问题
    ubuntu 中文设置
    javascript 处理鼠标右键事件
  • 原文地址:https://www.cnblogs.com/maokun/p/7076654.html
Copyright © 2011-2022 走看看