荷兰国旗系列问题

问题:给定一个数组arr和一个数字num,请把小于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