设为首页 加入收藏

TOP

剑指offer:调整数组顺序使奇数位于偶数前面(三)
2019-03-01 20:08:16 】 浏览:412
Tags:剑指 offer 整数 顺序 奇数位于 偶数 前面
bsp;
 
1 7 3 4 5 6 2 8
           
  i         j  

i和j继续扫描,i遇到4停止,j遇到5停止,交换两处的值:

               
1 7 3 5 4 6 2 8
           
      i j      

继续扫描,此时,i和j交错,扫描结束:

               
1 7 3 5 4 6 2 8
           
      j i      

基于该思路的算法时间复杂度为O(n),空间复杂度为O(1)C语言代码实现如下:

//reorder2.c
void reorder(int arr[],int len)
{
    if(NULL == arr || 0 == len)
        return;
    int i = 0;
    int j = len - 1;
    int temp;
    for(;;)
    {
        /*i j分别向右和向左移动,i遇到偶数停止,j遇到奇数停止?*/
        while(1 == (arr[i] & 1))
        {
            i++;
        }
        while(0 == (arr[j] & 1))
        {
            j--;
        }
        if(i < j)
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        /*交错时停止*/
        else
        {
            break;
        }

    }
}

运行效率比较

编译后,对一百万数据进行操作,运行时间结果如下。
解法一:

time ./reorder 1000000

并没有耐心等到结果出来。
解法二:

$ time ./reorder1 100000000
reorder for 100000000 numbers
before reorder:too much,will not print
after  reorder:too much,will not print

real    0m2.425s
user    0m2.141s
sys    0m0.284s

对1亿数据进行操作,耗时很短,只是内存占用较多。
解法三:

$ time ./reorder2 100000000
reorder for 100000000 numbers
before reorder:too much,will not print
after  reorder:too much,wil
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇1-1 编程总结:查找整数 下一篇C语言中关于逗号运算符的理解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目