日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 2299 (归并排序)

發布時間:2023/12/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 2299 (归并排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個無序的數列,由32位整數組成的,序列長度可達500000,現在通過不斷的兩兩交換,把這個序列排成由小到大的有序序列,問交換的次數是多少。

1 #include<stdio.h> 2 #include<stdlib.h> 3 #define NN 500005 4 5 int a[NN]; 6 __int64 count; 7 8 void Merge(int data[], int l, int m, int r) 9 { 10 int i = l; 11 int j = m + 1; 12 int k = 0; 13 int *pd; 14 pd = (int*)malloc((r-l+1) * sizeof(int));//歸并 15 16 while (i<=m && j<=r) 17 { 18 if (data[i] <= data[j]) 19 { 20 pd[k++] = data[i++]; 21 } 22 else 23 { 24 pd[k++] = data[j++]; 25 count += m - i + 1; 26 } 27 } 28 while (i <= m) 29 { 30 pd[k++] = data[i++]; 31 } 32 while (j<=r) 33 { 34 pd[k++] = data[j++]; 35 } 36 for (i=l, k=0; i<=r; i++, k++) 37 { 38 data[i] = pd[k]; 39 } 40 free(pd); 41 //pd = NULL; 42 } 43 44 void MergeSort(int data[], int l, int r) 45 { 46 if (l < r) 47 { 48 int m= (l + r) / 2; 49 MergeSort(data, l, m); 50 MergeSort(data, m+1, r); 51 Merge(data, l, m, r); 52 } 53 } 54 55 int main(void) 56 { 57 int n; 58 //int i; 59 while (scanf("%d", &n), n) 60 { 61 count = 0; 62 for (int i=0; i<n; i++) 63 { 64 scanf("%d", &a[i]); 65 } 66 MergeSort(a, 0, n-1); 67 printf("%I64d\n", count); 68 } 69 return 0; 70 }

轉載于:https://www.cnblogs.com/bucuo/archive/2012/11/15/2772157.html

總結

以上是生活随笔為你收集整理的poj 2299 (归并排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。