A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© paul20150103 中级黑马   /  2015-12-1 12:58  /  856 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

选择排序的流程是怎么样的, 原理是咋样的,  它和冒泡排序谁的效率会高些? 他们分别用在哪些场合?

3 个回复

倒序浏览
这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用tmp记下来现在a[0]最小……这样一趟比较完后a[tmp]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了
        int a[5] = {5,4,3,2,1};
        int tmp;
        // 选择排序
        for (int k = 0; k < 4; k++) {
            tmp = k;
            for (int i = k; i < 5; i++) {
                if (a < a[tmp]) {
                    //记录最小数位置
                    tmp = i;
                }
            }
            //交换tmp与k位置
            if (tmp != k) {
                a[tmp] = a[tmp] + a[k];
                a[k] = a[tmp] - a[k];
                a[tmp] = a[tmp] - a[k];
            }
        }

选择排序总是会比冒泡排序效率高,因为选择排序每轮至多只交换1欢,但从算法角度考虑,时间复杂度并没有什么改进,因为都是O(n^2)算法具体应用看情况 看样本的多少
回复 使用道具 举报
ZXY66452 发表于 2015-12-1 17:00
这是选择排序。先用a[0]与a[1]比较,当a[0]

这个代码能实现吗
回复 使用道具 举报
我就静静的听 来自手机 中级黑马 2015-12-2 20:59:02
板凳
不懂,疑惑中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马