• 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 }
  • 相关阅读:
    转载 :sql server 2005 无法删除数据库 "#Test",因为该数据库当前正在使用
    leetcode 1
    leetcode 2
    leetcode 242
    leetcode171
    leetcode 122
    leetcode 100
    算法:号码转换问题
    2014年10月29日 00:23 长沙
    算法:poj1066 宝藏猎人问题。
  • 原文地址:https://www.cnblogs.com/Long-w/p/9791935.html
Copyright © 2020-2023  润新知