質問のオランダの旗シリーズ

問題:数とNUM ARR配列を指定して、してくださいNUMカウントは、アレイの左側に比べて小さく、中央のnum個の配列、配列の右側にある数よりNUMの大きい内数に等しいです。
これは、追加の空間複雑性O(1)、O(N)の時間計算量を必要とします

#include <iostream>
using namespace std;


void Swap(int arr[], int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

int partition(int arr[], int L, int R, int num){
    int les = L - 1;
    int more = R + 1;
    int cur = L;
    while (cur < more){
        if (arr[cur] < num){
            Swap(arr, ++les, cur++);
        }
        else if (arr[cur] > num){
            Swap(arr, --more, cur);
        }
        else{
            cur++;
        }
    }
     cout << '[' << les + 1 << ',' << more - 1 << ']' << endl;
}

int main(){
    int arr[100] = {5,3,6,5,3,5,8,9};
    int num = 5;
    int L = 0, R = 7;
    partition(arr, L, R, num);
}

リリース元の4件の記事 ウォンの賞賛0 ビュー89

おすすめ

転載: blog.csdn.net/weixin_44177074/article/details/104344832
おすすめ