涉及快排的一道面试题——将负数放在正数的前面

缘起

面试题: 一个整数数组, 希望你能尽快的将负数放在数组首部.

分析

采用快排 pivot的思想

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>

#pragma warning(disable:4996)

//#define LOCAL
using namespace std;

void gao(int *a, int n)
{
int i = 0, j = n - 1;
while(i<j)
{
while(i<j&&a[j]>=0)j--;
while(i<j&&a[i]<=0)i++;
if (i<j) swap(a[i],a[j]);
}
}

int main()
{
#ifdef LOCAL
freopen("d:\\data.in","r",stdin);
#endif
srand((int)time(0));

int *p = new int[14];

for (int i = 0;i<14;i++)
{
p[i] = rand()%100-50;
}

for (int i = 0; i< 14; i++)
{
printf("%d ", p[i]);
}

puts("");

gao(p, 14);

for (int i = 0; i< 14; i++)
{
printf("%d ", p[i]);
}

return 0;
}