首页 > 代码库 > 数组排序使得数组负数在正数左边且按照原来的顺序
数组排序使得数组负数在正数左边且按照原来的顺序
假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)
例如
-3 4 2 -1 7 3 -5
排序后
-3 -1 -5 4 2 7 3
算法思想:从前往后遍历,记录第一个正数的位置,如果遇到负数就将负数插入到正数前面。
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 void SplitNumber(int* A, int size); 6 void PrintArray(int* A, int size); 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 int A[] = { 0, 2, -2, 3, -3, 4, 5, 7, -10 }; 11 int size = sizeof(A) / sizeof(int); 12 PrintArray(A, size); 13 SplitNumber(A, size); 14 PrintArray(A, size); 15 16 return 0; 17 } 18 19 20 void PrintArray(int* A, int size) 21 { 22 for (size_t i = 0; i < size; i++) 23 { 24 cout << A[i] << " "; 25 } 26 cout << endl; 27 } 28 29 void SplitNumber(int* A, int size) 30 { 31 int posIndex=-1, negIndex=-1; 32 for (size_t i = 0; i < size; i++) 33 { 34 if (negIndex==-1) 35 { 36 if (A[i]<0 && posIndex >= 0) 37 { 38 negIndex = i; 39 } 40 if (A[i]>0 && posIndex < 0) 41 { 42 posIndex = i; 43 } 44 } 45 if (negIndex>=0&&posIndex>=0) 46 { 47 int tmp = A[i]; 48 for (size_t i = negIndex; i >posIndex; i--) 49 { 50 A[i] = A[i - 1]; 51 } 52 A[posIndex] = tmp; 53 posIndex++; 54 negIndex = -1; 55 } 56 } 57 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。