zoukankan      html  css  js  c++  java
  • 2、【常见算法】按序重排问题

    给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
      1、排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
      2、不能使用额外存储空间
    例子如下
    输入 0、3、0、2、1、0、0
    输出 0、0、0、0、3、2、1
    分析

      此排序非传统意义上的排序,因为它要求排序前后非0元素的相对位置不变,或许叫做整理会更恰当一些。我们可以从后向前遍历整个数组,遇到某个位置i上的元素是非0元素时,如果arr[k]为0,则将arr[i]赋值给arr[k],arr[i]赋值为0。实际上i是非0元素的下标,而k是0元素的下标。

     1 /*
     2 给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
     3 1、排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
     4 2、不能使用额外存储空间
     5 例子如下
     6 输入 0、3、0、2、1、0、0
     7 输出 0、0、0、0、3、2、1
     8 
     9 */
    10 #include <iostream>
    11 
    12 using namespace std;
    13 
    14 void sortArray(int *arr, int n)
    15 {
    16     int i, k = n-1;
    17 
    18     for(i = n-1; i >= 0; i--)
    19     {
    20         if(arr[i] != 0)
    21         {
    22             if(arr[k] == 0)
    23             {
    24                 arr[k] = arr[i];
    25                 arr[i] = 0;
    26             }
    27             k--;
    28         }
    29     }
    30 }
    31 
    32 int main()
    33 {
    34     int arr[7] = {0, 3, 0, 1, 0, 0, 2};
    35     sortArray(arr, 7);
    36     for(int i = 0; i < 7; i++)
    37     {
    38         cout << arr[i] << "	";
    39     }
    40     cout << endl;
    41     return 0;
    42 }
  • 相关阅读:
    PHP命令行执行程序php.exe使用及常用参数
    如何搜百度云盘里别人分享的文件
    WIN8下笔记本共享热点的设置
    COMPANY_点取消会卡死的解决方法
    python urllib
    windows技术
    五分钟搞定Linux容器
    分分钟教你制作完美的虚拟机镜像
    事件日志监控工具推荐
    Linux服务器管理员必备Linux命令TOP5
  • 原文地址:https://www.cnblogs.com/Long-w/p/9791935.html
Copyright © 2011-2022 走看看