简单选择排序

简单选择排序也叫作直接选择排序

基本思想:

每一趟在后面n-i+1个中选出关键字最小的记录,作为有序序列的第i个记录

(1)设待排序的记录存放在数组r[1…n ]中,第一趟从r[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k].

(2)第二趟从r[2]开始,通过n-2次比较,从n-1个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k]。

(3)第i趟从r[i]开始,通过n-i次比较,从n-1+1个记录中选出关键字最小的记录,记为r[k],交换r[i]和r[k].

(4)经过n-1趟,排序完成。

void SelectSort(SqList &K)
{
//对顺序表L做简单选择排序
    for(i=1;i<L.length;++i)
{
//在L.r[i...L.length]中选择关键字最小的记录
     k=i;
     for(j=j+1;j<=L.length;j++)
     if(L.r[j].key<L.r[k].key)k=j;//k指向此趟排序中关键字最小的记录
     if(k!=i)
 {
     t=L.r[i];
     L.r[i]=L.r[k];//交换r[i]与r[k]
     L.r[k]=t;
}
}
}

算法分析

移动次数

  • 最好情况: 0
  • 最坏情况:3(n-1)

比较次数:1/2(n*n-n)

时间复杂度:O(n*n)

空间复杂度:O(1)

算法特点

            不稳定
时间: 2024-12-02 10:05:23

简单选择排序的相关文章

c语言-简单选择排序 时间限制: 40 Sec 内存限制: 128 MB

问题描述 简单选择排序 时间限制: 40 Sec 内存限制: 128 MB 题目描述 编一程序用简单选择排序方法对n个整数排序(从大到小). 对n个数进行降序排列,简单选择排序的算法思想如下: 1)首先通过n-1次比较,从n个元素中找出值最大的元素,将它与第一个元素交换.(第一趟排序). 2)再通过n-2次比较,从剩余的n-1个元素中找出值次大的元素,将它与第二个元素交换.(第二趟排序). 3)重复上述操作,共进行n-1趟排序后,排序结束. 输入 先输入整数个数n(n<=100000) 然后输入

必须掌握的八种排序(3-4)--简单选择排序,堆排序

3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换: 然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. (2)理解图 第一次 : 08最小 和21交换位置 第二次: 除第一个位置的08外 16最小 和25交换位置 以此类推 (3)代码实现 public static void selectSort(int[] a) { int position = 0; for (int i = 0; i < a.length

常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)

选择类的排序算法 简单选择排序算法 采用最简单的选择方式,从头到尾扫描待排序列,找一个最小的记录(递增排序),和第一个记录交换位置,再从剩下的记录中继续反复这个过程,直到全部有序. 具体过程: 首先通过 n –1 次关键字比较,从 n 个记录中找出关键字最小的记录,将它与第一个记录交换. 再通过 n –2 次比较,从剩余的 n –1 个记录中找出关键字次小的记录,将它与第二个记录交换. 重复上述操作,共进行 n –1 趟排序后,排序结束. 如图   过程图解 令 k=i:j = i + 1: 目

常用内部排序算法之四:简单选择排序、直接插入排序和冒泡排序

前言 之所以把这三类算法放在一块,是因为除此之外的算法都是在这三类算法的基础上进行优化的.简单选择排序的思想是每一趟n−i+1(i=1,2,...,n−1)个记录中选择最小的记录作为有序序列的第i个记录.直接插入排序的思想是将一个记录插入到已经排好序的有序序列中,从而得到一个新的.记录数增加1的有序表.冒泡排序的算法思想是不断在交换,通过交换完成最终的排序,每一趟的交换就会把最大的记录取出来,下一趟则会把第二大的记录取出来,这样每进行一趟交换就把一个记录取出来的过程称为冒泡. 简单选择排序算法

排序算法之简单选择排序

简单选择排序 接下来我们来简单地学习一下简单选择排序. 原理: 通过n-1次关键字之间的比较,从n-i+1个记录中找到关键字最小的记录,并和第i个记录交换.其实很好理解:在冒泡排序中,我们每次都做了交换,而这里我们不需要每次都进行交换,而是把最大的数(min记录的是最大值的下标)和第i个记录交换. 代码如下: void simpleChooseSort(int a[],int aLength) { int i,j,min; for (i=0; i<aLength; i++) { min = i;

排序算法之二选择排序-简单选择排序和对堆排序

简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较位置.(2)实例: (3)代码实现: 1234567891011121314151617181920212223242526272829303132 /** * 简单选择排序 */ private static <AnyType extends Comparable<? super AnyType>> voi

简单选择排序SimpleSelectSort

冒泡排序:在每一次比较的时候,如果发现相邻两数的次序不对,都会马上就把两数进行对调. 选择排序:则在比较过程中(内循环里面)并不进行对调,而是先记录下最小(大)数的下标,在一次扫描完成后再进行对调.  1.算法思想         在要排序的一组数中,选出最小(或者最大)的一个数与第 i(i=0)个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第i+1个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 2.代码实现 /** * 在要排序的一

JAVA简单选择排序算法原理及实现_java

简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: 所需进行记录移动的操作次数较少 0--3(n-1) ,无论记录的初始排列如何,所需的关键字间的比较次数相同,均为n(n-1)/2,总的时间复杂度为O(n2):空间复杂度 O(1) 算法改进:每次对比,都是为了将最小的值放到第一位,所以可以一比到底,找出最小值,直接放到第一位,省去无意义的调换移动操作

PHP简单选择排序算法实例_php技巧

简单的选择排序算法:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换 复制代码 代码如下: <?php     class Sort{         /**          * 简单的选择排序          *          * @param unknown_type $arr          */         public function selectSort(&$arr) {