现在有一个n个证书的序列,交换两个相邻的数的位置直到整个序列按照升序排列,
那么将整个序列排好需要交换多少次?
例如 1,2,3,5,4 只需要交换一次即可。
第一行输入一个正整数n(n<100),表述数字序列元素个数,占一行;
接下来一行输入从1到n的n个整数序列,中间用空格隔开
输入:
4
4 3 2 1
输出:
6
1 /************************************************************************* 2 > File Name: SpecialExchange.c 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年04月24日 星期日 19时26分01秒 6 ************************************************************************/ 7 8 #include <stdio.h> 9 #define BufferSize 1000 10 11 int SpecialExchange() 12 { 13 int a[BufferSize]; 14 int n; 15 scanf("%d", &n); 16 17 int i = 0; 18 for( i=0; i<n; i++ ) 19 { 20 scanf("%d", &a[i]); 21 } 22 23 int count = 0; 24 int temp = 0; 25 26 int j = 0; 27 for( i=1; i<n; i++ ) 28 { 29 if( a[i] < a[i-1] ) 30 { 31 int t = a[i]; 32 for( j = i-1; j>=0 && a[j]>t; j-- ) 33 { 34 temp = a[j+1]; 35 a[j+1] = a[j]; 36 a[j] = temp; 37 count ++; 38 39 } 40 } 41 } 42 43 printf("%d\n", count); 44 return count; 45 } 46 47 int main() 48 { 49 SpecialExchange(); 50 return 0; 51 }
时间: 2024-12-15 06:59:05