问题1:
给定一个数组arr,和一个数num,请把小于等于num的数放在数
组的左边,大于num的数放在数组的右边。
要求额外空间复杂度O(1),时间复杂度O(N)
问题2(荷兰国旗问题)
给定一个数组arr,和一个数num,请把小于num的数放在数组的
左边,等于num的数放在数组的中间,大于num的数放在数组的
右边。
要求额外空间复杂度O(1),时间复杂度O(N)
求解答案:
#include <iostream> //题目1 void func(int *a,int b) { int p=-1; for (int i = 0; i <10 ; i++) { if (a[i]<b ) { std::swap(a[p+1],a[i]); p++; } } } //题目2荷兰国旗问题func1 void func1(int *a, int b) { int less=-1; int num=11; int more=12; int current=0; while (current<more) { if (a[current]<b) { std::swap(a[current++],a[++less]); } else if (a[current]>b) { std::swap(a[current ],a[more-1]); more--; } else if (a[current]=b) { current++; } // else if (a[current]=b) // { // current++; // } std::cout<<"less:"<<less<<std::endl; std::cout<<"more:"<<more<<std::endl; } } int main() { int array[]={3,11,5,7,9,9,9,2,33,44,12,45}; // func(array,9); // for (int i = 0; i <10 ; i++) { // std::cout<<array[i]; // } // std::cout<<std::endl; std::cout<<"------------------------------------"<<std::endl; func1(array,9); for (int i = 0; i <12 ; i++) { std::cout<<array[i]<<" "; } std::cout<<std::endl; return 0; }