Binary Selection Sort(二元选择排序)

来源:互联网 发布:安卓投屏软件 airplay 编辑:程序博客网 时间:2024/06/05 09:29

算法思想

二元选择排序是对简单选择排序(点击打开链接)的小改进,简单选择排序对序列每一次遍历只找出一个元素,而二元选择排序在每一次遍历中都会找出序列两端的元素(最大和最小),两端同时向中间逼近。这样理论上遍历的次数就减少了一半,加快了排序速度。


实现步骤

以从小到大排列为例
1.遍历序列,找出最小元素和最大元素
2.将最小元素与无序部分第一个元素交换,最大元素与无序部分最后一个元素交换
3.更新无序部分边界
4.重复步骤1-3,直到无序部分不存在元素

源码

void BinarySelectionSort(int *a, int n){int i, j, min, max, minvalue, maxvalue;for (i = 0; i < n/2; i++) //外层循环控制无序部分的边界{min = max = i;for (j = i; j < n-i-1; j++){if (a[j] < a[min]){min = j;continue;}if (a[j] > a[max])max = j;}minvalue = a[min];maxvalue = a[max];a[min] = a[i];a[max] = a[n-i-1];a[i] = minvalue;a[n-i-1] = maxvalue;}}


第一段源码无论两端元素是否已经是最小(最大)值都进行交换,如果初始序列有相当一部分元素已经在正确的位置,这无疑增加了大量无意义的数值交换,下面是改进版:
void BinarySelectionSort(int *a, int n){        int i, j, min, max, minvalue, maxvalue;        for (i = 0; i < n/2; i++) //外层循环控制无序部分的边界        {                min = max = i;                for (j = i; j < n-i-1; j++)                {                               if (a[j] < a[min])                        {                                       min = j;                                continue;                        }                        if (a[j] > a[max])                                max = j;                }if (min != i){minvalue = a[min];a[min] = a[i];a[i] = minvalue;}if (max != n-i-1){maxvalue = a[max];a[max] = a[n-i-1];a[n-i-1] = maxvalue;}        }}


第二段源码增加了判断条件,避免对已经有序的元素的数值交换。

时间复杂度

二元选择排序虽然将遍历次数减少了一半,但从时间复杂度来看与简单选择排序是一样的,都是O(n²),且两者对于同一序列的所需交换次数是一样的。

稳定性

与简单选择排序相同,对于相等元素,二元选择排序会破坏它们的相对次序,因此属于不稳定的排序。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 离婚老公欠的钱怎么办 欠了几十万债怎么办 执行死刑时已怀孕怎么办 执行死刑世已经怀孕怎么办 孩子被爸爸打该怎么办 二年级的孩子逃课怎么办 龙妈和雪诺怎么办 车本扣6分怎么办 超速50扣了12分怎么办 开车超速扣12分怎么办 超速一次记12分怎么办? 驾照超速扣12分怎么办 c牌一次扣12分怎么办 超速罚500扣12分怎么办 高速超速记3分怎么办 高速超速记12分怎么办 过江隧道关闭了怎么办 高速限速60超了怎么办 超速扣了12分怎么办 上海 12分扣完了怎么办 狗抓伤只淌白沫怎么办 刑事案件法院迟迟不判决怎么办 法院判决书下来了没钱赔偿怎么办 被起诉开庭不去怎么办 地道塌陷造成房屋倒塌怎么办 海外看不了b站怎么办 最近脸胖了好多怎么办 最近胖了好多怎么办啊? 很瘦的人手胖怎么办 长得丑不敢相亲怎么办 abs抱死发不动了怎么办 qq飞车手游车到期了改装怎么办 育碧下载游戏慢怎么办 豹纹守宫鼻子还有个残皮怎么办 睫角守宫断尾怎么办 定金发票弄丢了怎么办 xp电脑显示输入不支持怎么办 月子见风怎么办暴雪将 老氏电视机出现雪花点怎么办 飞利浦电视显示雪花片怎么办 电视无信号出雪花怎么办