pat 1067. Sort with Swap(0,*) (25)

来源:互联网 发布:war包解析源码 编辑:程序博客网 时间:2024/04/30 07:16

这一点输入短小易于理解的模拟题,就喜欢这样的题。

方法很简单,a[0]为非0的时候循环交换,把a[0]位置上的数放到正确的位置,直到a[0]等于0,

这个时候可能没有完全排好序,所以要有一个函数需要不在正确位置上的数。

注意这个函数,不能每次都从1开始寻找,要从上次找到的位置开始寻找,要不然会超时。

代码如下:

#include <iostream>using namespace std;int a[100001]={0};int N;int findBegin(int begin) //begin 是上次函数执行找到的位置,这个很重要{for(int i = begin;i<N;i++)if(a[i] != i){return i;}return 0;}int main(){scanf("%d",&N);int begin = 1;int num = 0;int i = 0;for(i = 0;i<N;i++){scanf("%d",&a[i]);}begin = findBegin(begin);while(begin){if(a[0] == 0){num++;int temp = a[begin]; a[begin] = a[0]; a[0] = temp;}while(a[0] != 0){num++;int j = a[0];a[0] = a[j];a[j] = j;}begin = findBegin(begin);}printf("%d\n",num);return 0;}


0 0
原创粉丝点击