题目:借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)
完整代码实现:
#include<iostream> using namespace std; void blocks(int* a, int n) { int low = 0, high = n - 1, tmp = 0; while (low<=high) { if (a[high] >= 0 ) { if (a[low] < 0) { tmp = a[high]; a[high] = a[low]; a[low] = tmp; } low++; } else { high--; } } } int main() { int arr[10] = { 1,0,-3,-5,7,8,2,-4,9,4 }; blocks(arr, 10);//调用函数 for (int i = 0; i < 10; i++) { printf("%d\n", arr[i]); } system("pause"); return 0; }
运行结果: