排序算法之简单选择排序

简单选择排序

接下来我们来简单地学习一下简单选择排序。

原理:

通过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;
        for (j=i+1; j<aLength; j++) {
            if (a[min]<a[j]) {
                min=j;
            }
        }
        if (i!=min) {
            swap(a, i, min);
        }
    }
}

比如说我们待排序的序列是:
{9,1,5,8,3,7,4,6,2}
也就是让数组第一个元素和后面的每个元素比较,但是比较的过程中不修改不进行交换,而是记录最大的数据的下标,然后把该最大元素与a[i]进行交换,这样便可以实现简单选择排序。
swap函数如下:

 //交换位置
void swap(int a[],int i,int j)
{
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

主函数如下:

int main(int argc, const char * argv[]) {

    int a[] = {12,34,9,1,5,8,3,7,4,6,2,13,42,16,23};    //length = 15
    simpleChooseSort(a, 15);

    return 0;
}

运行结果:

简单选择排序算法:42 34 23 16 13 12 9 8 7 6 5 4 3 2 1 

其时间复杂的也是 O(n^2 ),虽然与冒泡排序同是O(n^2 ), 但是简单选择排序的性能还是要略优于冒泡排序的。

时间: 2024-12-06 11:00:46

排序算法之简单选择排序的相关文章

Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)_java

一.插入排序算法实现java版本 public static int[] insert_sort(int[] a) { for (int i = 0; i < a.length; i++) { for(int j=i+1;j>0&&j<a.length;j--) { if(a[j]<a[j-1]) { int tmp = a[j]; //这样定义初始化逻辑上是可以的,j变量,每次tmp的值变化的 a[j] = a[j-1]; a[j-1] = tmp; } } }

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

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

排序算法系列之选择排序

简单选择排序也是直接选择排序 基本思想     选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 排序过程:     对于一组关键字{K1,K2,-,Kn}, 首先从K1,K2,-,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,- ,Kn中选择最小值 Kz,再将

内部排序算法:直接选择排序

基本思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: 初始状态:无序区为R[1..n],有序区为空. 第1趟排序:在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1] 交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区. -- 第i趟排序:第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1). 该趟排序从当前无序区中选出关键字最小的记录R[k],

常见的排序算法四——直接选择排序

1.直接选择排序 原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序. 要点: 实现: Void SelectSort(Node L[]) { Int i,j,k;//分别为有序区,无序区,无序区最小元素指针 For(i=0;i<length;i++) { k=i; For(j=i+1;j<length;j++) { If(L[j]<L[k]) k=j; } If(k!=i)//若发现最小元素,则移动到有序区 { Int tem

Lua中写排序算法实例(选择排序算法)_Lua

早在12年的时候,学过一个月的lua,当时看的是<programming in lua>,一直没用过,然后就忘了.现在我下定决心重新学习它. 时间久了,对编程的热情也随之消失殆尽,很难找回当初编程的乐趣了.近来一放假就玩英雄联盟,太浪费时间,玩个十来局一天就过去了,浑浑噩噩的,这实在不是我想过的.所以,今天我把它卸载了.如果你也是英雄联盟玩家,希望你不要沉迷其中. 从事游戏开发还不到一年,已经有点厌倦了,同事们一致认为游戏公司普遍很浮躁,有些小公司没有一点技术氛围.我知道的有些程序员,技术远远

JavaScript中几种排序算法的简单实现_基础知识

排序算法的实现 我的JS水平就是渣渣,所以我就用类似于JAVA和C的方式来写JavaScript的排序算法了. 而且这里我不讲算法原理,仅仅只是代码实现,可能会有Bug,欢迎大家博客评论指导.插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排

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

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

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

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