问题描述:
把一个0-1串(只包含0和1的串)进行排序,你可以交换任意两个位置,使所有的0在前边,所有的1在后边,问最少交换的次数?
方法分析:两个指针,分别指向头和尾,当头指向1,尾指向0的时候,进行交换,直至两个指针相遇!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int SwapTime(char *arr, int length)
{
if (arr == NULL || length <= 1)
return -1;
int count = 0;
for (int i = 0, j = length; i < j; ++i, --j)
{
while (arr[i] != '1' && i < j)
++i;
while (arr[j] != '0' && i < j)
--j;
if (i < j)
count++;
}
return count;
}
void test1()
{
char *str = "11110000";
printf("Changed %d times.\n", SwapTime(str, strlen(str)));
}
void test2()
{
char *str = "111";
printf("Changed %d times.\n", SwapTime(str, strlen(str)));
}
void test3()
{
char *str = "10011001";
printf("Changed %d times.\n", SwapTime(str, strlen(str)));
}
int main()
{
test1();
test2();
test3();
printf("%s %s\n", __DATE__, __TIME__);
system("pause");
return 0;
}
运行结果:
Changed 4 times.
Changed 0 times.
Changed 2 times.
Aug 25 2016 16:51:32
请按任意键继续. . .