最近真是一头扎进算法的大海里,愈发觉得“白头搔更短,浑欲不胜簪”。。而且!!我并没有觉得自己有毛线进步
それは難しいですね。でも、頑張るぞ。
最近看了一道荷兰国旗的题,发现csdn里关于此的博客还挺少,所以就决定发一篇,希望可以帮到和我一样上不了岸的小白。。
//荷兰国旗 等于num的数放中间,小于的放左边,大于的放右边
#include <stdio.h>
int main (void)
{
int num=5;
printf("你想输入几个数呢??\n");
int n;
scanf("%d",&n);
int array[n];
int l=-1;
//int less=array[l];
int more=n; //刚开始没设这个变量,但是发现..数组的n值都被我改了。。
for(int i=0;i<n;i++)
{
scanf("%d",&array[i]);
if(array[i]<num)
{
int temp=array[l+1];
array[l+1]=array[i];
array[i]=temp; //和小于区域的下一个数交换即可
l++;
}
else if(array[i]>num)
{
array[more-1]=array[i]; //数组最后反倒是最后才填满的
more--;
}
else
{
array[l+1]=array[i]; //刚开始写的是 array[i]=array[i],但是要清楚,是小于num的数推着等于num 的数往前走
//所以,还是要以L+1为等于num的数的基础位置
}
}
for(int k=0;k<n;k++)
printf("%d ",array[k]);
return 0;
}
ちょっと嬉しいですね。