10327

原文链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1268

给一段序列,求出升序排序时最少需要的交换次数。

用冒泡排序法,计算交换次数即可。

代码:

 1 #include<stdio.h>
 2 long bubbleSort(int arr[],int n)/*对arr数组的前n个数进行冒泡排序*/
 3 {
 4     int i,j,t,flog;
 5     long k=0;
 6     for(i=0;i<n-1;i++)
 7     {
 8         flog=0;
 9         for(j=0;j<n-i-1;j++)
10         {
11             if(arr[j+1]<arr[j])
12             {
13               t=arr[j+1];
14               arr[j+1]=arr[j];
15               arr[j]=t;
16               flog=1;
17               k++;
18              }
19         }
20         if(!flog) return k;/*没有进行交换,排序提前结束*/
21     }
22     return k;
23 }
24 
25 int main()
26 {
27     int n,a[1000],i;
28     while(scanf("%d",&n)!=EOF)
29     {
30         for(i=0;i<n;i++)
31         {
32             scanf("%d",&a[i]);
33         }
34         printf("Minimum exchange operations : %d
",bubbleSort(a,n));
35     }
36     return 0;
37 }
View Code
原文地址:https://www.cnblogs.com/syiml/p/3203487.html