新手笔记之选择排序

  1. 概念:

    选择排序是一种简单直观的排序算法,它的工作原理是:第一次从待排序的列表中选择一个最小(最大)的元素,放在列表的起始位置,然后再从剩下的未排序的元素中寻找最小(最大)元素,放到已排序序列的末尾。以此类推,直到待排序的元素为零。选择排序是不稳定的排序方法。

    关于稳定性,因为选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

  2. 步骤:

    • 先从待排序的列表中找到最小(最大)元素。怎么找?循环呗,把整一个列表循环一遍,找出最小(最大元素)。
    • 把最小(最大)元素与第一个元素交换位置。也就是再循环一遍里列表,找到最小(最大)元素的位置,把该位置的数据与起始位置交换,以此类推,再从剩下的待排序的列表中找到最小(最大)元素,把该数据的位置与第二位交换,直到排序完成。
  3. 代码实现:

    void swap(int *a,int *b) //交换两数位置 
    { 
        int temp = *a; 
        *a = *b; 
        *b = temp; 
    } 
    void selection_sort(int arr[], int len) 
    { 
        int i,j; 
        for (i = 0 ; i < len ‐ 1 ; i++) 
        { 
            int min = i; 
            for (j = i + 1; j < len; j++) //遍历未排序的元素 
            { 
                if (arr[j] < arr[min]) //找到目前最小值 
                { 
                    min = j; //记录最小值 
                } 
            } 
            swap(&arr[min], &arr[i]); //交换位置 
        } 
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值