Puzzle: Sort an array of 0's and 1's in one parse.

后端 未结 6 804
情歌与酒
情歌与酒 2020-12-31 16:00

Is it possible to arrange the array made up of only 1\'s and 0\'s in descending order within one parse without using auxiliary array?
For example: Suppose you have an ar

6条回答
  •  天命终不由人
    2020-12-31 16:54

    How about recursion? Simple and elegant, as always.

    void countAndRewrite(int arr[], size_t n, size_t *cone, size_t total)
    {
        if (n) {
            if (arr[0])
                ++*cone;
    
            countAndRewrite(arr + 1, n - 1, cone, total);
            arr[0] = total - n < *cone;
        }
    }
    
    int main()
    {
        int arr[] = { 0, 1, 0, 1, 1, 1, 0 };
        size_t cone = 0;
        countAndRewrite(arr, 7, &cone, 7);
        for (size_t i = 0; i < 7; i++)
        printf("arr[%zu] = %d\n", i, arr[i]);
    
        return 0;
    }
    

提交回复
热议问题