用二重的循环就可实现。用i指向前元素,用j指向后元素,当不需要交换时i,j相向移动。移动结束时若i,j未交错就交换a[i]与a[j]一轮大循环结束时i与j再向后,向前移动一位,直到i,j交错为止。最后输出数组中的全部元素。
#include
int main()
{ int n,i,j,t,a[100];
scanf("%d",&n);
for(i=0;i
for(i=0,j=n-1;i
while(a[j]<60)j--;
if(i
}
for(i=0;i
return 0;
}
很简单,只要把不及格的丢到后面,交换一个及格的回来就行了。
具体点就是,先从右往左扫找到一个错误地丢在后排的及格的,再从左往右(或者说从前往后)扫一个错误地丢在前排的不及格的,互换;这时候最左边最右边肯定都符合了。继续这么扫,交换那些呆错地方的东西,就行了。
其实跟快速排序的思路有点像,题主感兴趣可以去看看。
#include
#include
int main()
{
int N;scanf("%d",&N);
int a[N];
for(int i=0;i int lst=N-1; while(a[lst]<60)--lst; for(int i=0;i { if(a[i]<60) { int temp=a[i];a[i]=a[lst];a[lst]=temp; while(a[lst]<60)--lst; } } for(int i=0;i }