排序算法总结(1)--选择排序

原创 2017年05月18日 19:47:00

一、简介

选择排序是最简单的排序算法。考虑存储在数组A中的n个数:首先找出A中最小的元素并将其与A[0]交换。接着找到A[1]到A[n-1]中最小的数并与A[1]交换。对A中前n-1个数采用同样的操作。

二、伪代码

for i=0 to A.length-1
        j=findMin(A,i);  //找到A[i,...,end]中最小元素的索引j
        if (A[i]>A[j])
            swap(A[i],A[j]);  //交换A[i]和A[j]

三、代码实现

public class Method {
        public static void main(String[] args) {
            int[] array={31,41,59,26,41,58,1,2};
            selectSort(A);
        }

        public static void selectSort(int[] A){
            for(int i=0;i<A.length;i++){
                //findMin(array,i)
                int j=findMin(A,i);
                if(A[i]>A[j]){
                    int temp=A[i];
                    A[i]=A[j];
                    A[j]=temp;
                }
            }
        }

        public static int findMin(int [] array,int index){
            int j=index;
            for (int i=index+1;i<array.length;i++){
                if (array[j]>array[i]){
                    j=i;
                }
            }
            return j;
        }   
    }

四、复杂度分析

时间复杂度:O(n^2)
空间复杂度:O(1) ,原址排序
每进行一次循环排序,至少有一个元素可以确定最终位置。

五、注意事项

对于长度为n的数组,选择排序需要n(n-1)/2次比较和最多n-1次交换
比较次数:(n1)+(n2)+...+2+1=n(n1)/2;
选择排序的两个特点:
1、比较次数和输入无关:在每次循环中,为了找到最小元素扫描一遍数组并不能为下一次扫描提供有用的信息。一个已经有序的数组或全部元素相同的数组和一个随机排列的数组比较的次数一样。
2、数据的移动最少:每次循环最多交换一次,所以最多交换n-1次,交换次数和数组大小成线性关系。

排序算法学习心得

排序算法
  • Tina_yaoyao
  • Tina_yaoyao
  • 2015年10月02日 12:01
  • 861

排序算法总结与C代码

最近参加笔试,感觉排序算法需要好好的整理一下,感觉部分排序算法理解得不是很清楚;通过这段时间的整理与总结来对排序算法的一个复习吧。         主要参考了《大话数据结构》: 1. 冒泡排序的基本思...
  • yyme411
  • yyme411
  • 2013年10月09日 21:23
  • 7182

数据结构排序系列详解之六 树形选择排序

这篇博客接着来说说选择类排序之一的排序:树形选择排序 在简单选择排序中,每次的比较都没有用到上次比较的结果,所以比较操作的时间复杂度是O(N^2),想要降低比较的次数,则需要把比较过程中的大小关系保存...
  • S04103037
  • S04103037
  • 2013年07月30日 11:39
  • 2356

【排序算法】选择排序原理及Java实现

选择排序是一种简单直观的排序算法,其基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月26日 21:28
  • 2489

排序算法Java实现——选择排序(直接选择排序)

基本思想:n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果 第一次比较:程序将记录定位在数组的第一个位置,拿第一个数据与后面的每个数据对比,用一个变量mix记录比第一个数小的数据的索...
  • singit
  • singit
  • 2017年04月22日 22:30
  • 602

选择排序和归并排序

选择排序 选择排序的基本思想:每一次在n-i+1(i=1,2,…,n-1)个记录中选取键值最小的记录作为有序序列的第i个记录。 直接选择排序 直接选择排序算法的基本思想:在第i次选择操作中,通过...
  • u013044000
  • u013044000
  • 2015年10月04日 22:03
  • 787

“深入理解”—选择排序算法

选择排序算法有两种:直接选择排序和堆排序
  • qq_25827845
  • qq_25827845
  • 2016年07月10日 11:37
  • 2117

选择排序的伪代码

以下是选择排序的伪代码以及一些分析: SELECTION-SORT(A)                         执行次数 1   for j = 1 to Length(A)      ...
  • xiaochaoqu
  • xiaochaoqu
  • 2013年11月14日 16:59
  • 2378

排序算法之选择法排序(C/C++)

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序...
  • zgaoq
  • zgaoq
  • 2017年01月17日 20:19
  • 1883

排序算法之 选择排序 及其时间复杂度和空间复杂度

其实选择排序是非常简单的,和冒泡排序有异曲同工之妙。就是把元素分成两部分,一部分是有序的,另外一部分是无序的;每次循环从无序的元素中选取一个元素放到有序的元素中,依次循环到最后把所有元素都放到了有序那...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年03月17日 11:44
  • 6848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法总结(1)--选择排序
举报原因:
原因补充:

(最多只允许输入30个字)