这道题和快排非常相似,设两个指针,一个在最前面,一个在最后面,两个指针不断向中间靠拢,当前面指针指向非负数,后面指针指向负数的时候就交换。
可以用来练习快排。
#include<iostream>
using namespace std;
int num[10] = {-1, 5, 3, -5, -6, -7, 2, 5, -5, -1};
void swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void sort()
{
int i = 0, j = 9;
while(i != j)
{
if(i < 10 && num[i] < 0)
i++;
if(j >= 0 && num[j] >= 0)
j--;
swap(num[i], num[j]);
}
for(int i = 0; i < 10; i++)
printf("%d ", num[i]);
putchar(10);
}
int main()
{
sort();
getchar();
return 0;
}