码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 面试题之冒泡排序

时间:2014-08-26 15:41:56      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:os   io   for   ar   代码   amp   sp   size   c   

每次笔试,80%的笔试上总会提到冒泡排序。

先写一个教科版本的:

    // [冒泡排序] 细节:内层循环注意!!!
    int array[] = {3, 2, 5, 9, 7, 6};
    int length = sizeof(array) / sizeof(array[0]);
    for (int i = 0 ; i < length - 1; i ++) {
        for ( int j = 0; j < length - 1 - i ; j ++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    for ( int i = 0; i < length; i ++) {
        printf("%d", array[i]);
    }

之后在面试官看完之后,他说了这么一句话,假如是个有序数组,那这样的效率是不是降低了?

我就又改了改

    for (int i = 0 ; i < length - 1; i ++) {
        int flag = 0;
        for (int j = 0 ; j < length - 1 - i; j ++) {
            if (array[j] > array[j + 1]) {
                swap(array + j, array + j + 1);
                flag ++;
            }
        }
        printf("%d\n", flag);
        if (flag == 0) {
            break;
        }
    }

看完之后,他说,还能更简单点。。。这就折磨我了。。。想半天没想到,他最后给我看的是这样一串代码,觉得受益匪浅就记下了。

    int flag = 1;
    for (int i = 0 ; i < length - 1 && 1 == flag; i ++) {
        flag = 0;
        for (int j = 0; j < length - 1 - i;  j ++) {
            if (array[j] > array[j + 1]) {
                swap(array + j, array + j + 1);
                flag = 1;
            }
        }
    }


iOS 面试题之冒泡排序

标签:os   io   for   ar   代码   amp   sp   size   c   

原文地址:http://my.oschina.net/CgShare/blog/306737

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!