黑马程序员技术交流社区

标题: 选择排序的问题 [打印本页]

作者: paul20150103    时间: 2015-12-1 12:58
标题: 选择排序的问题
选择排序的流程是怎么样的, 原理是咋样的,  它和冒泡排序谁的效率会高些? 他们分别用在哪些场合?
作者: ZXY66452    时间: 2015-12-1 17:00
这是选择排序。先用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)算法具体应用看情况 看样本的多少

作者: paul20150103    时间: 2015-12-2 19:41
ZXY66452 发表于 2015-12-1 17:00
这是选择排序。先用a[0]与a[1]比较,当a[0]

这个代码能实现吗
作者: 我就静静的听    时间: 2015-12-2 20:59
不懂,疑惑中




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2