久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2239|回復: 0
打印 上一主題 下一主題
收起左側

算法設計與分析程序

[復制鏈接]
跳轉到指定樓層
樓主
算法設計與分析部分程序代碼

第三題:假設A[1……n]是一個有n個不同數的數組。若i<j且A[ i]>A[j],則對偶(i,j)稱為A的一個逆序對。給出一個確定在n個元素的任何排列中逆序對數量的算法,要求時間復雜度為O(nlog2n)
算法分析:
因為題目中要求時間復雜度為O(nlog2n),所以不用暴力求解法和插入排序法。考慮用歸并排序法,只需要在歸并排序的基礎上添加一個變量counter用來逆序計數即可。具體實現見如下代碼。時間復雜度為O(nlog2n)
  1. #include<iostream>
  2. using namespace std;
  3. int Merge(int* a, int al, int ah, int* b, int bl, int bh, int* c)
  4. {
  5.         int i, j, k;
  6.         int counter = 0;
  7.         i = al;
  8.         j = bl;
  9.         k = 0;
  10.         while (i <= ah && j <= bh) {
  11.                 if (a[i] <= b[j]) {
  12.                         c[k] = a[i];
  13.                         i++;
  14.                 }
  15.                 else {
  16.                         c[k] = b[j];
  17.                         j++;
  18.                         counter += ah - i + 1;
  19.                 }
  20.                 k++;
  21.         }
  22.         while (i <= ah) {
  23.                 c[k] = a[i];
  24.                 k++;
  25.                 i++;
  26.         }
  27.         while (j <= bh) {
  28.                 c[k] = b[j];
  29.                 k++;
  30.                 j++;
  31.         }
  32.         return counter;
  33. }
  34. int MergeSort1(int* A, int* temp, int low, int high)
  35. {
  36.         int mid, i;
  37.         if (low >= high) return 0;
  38.         mid = (low + high) / 2;
  39.         int ans1 = MergeSort1(A, temp, low, mid);
  40.         int ans2 = MergeSort1(A, temp, mid + 1, high);
  41.         int ans3 = Merge(A, low, mid, A, mid + 1, high, temp);
  42.         for (i = 0; i <= high - low; i++) {
  43.                 A[low + i] = temp[i];
  44.         }
  45.         return ans1 + ans2 + ans3;
  46. }
  47. int MSort(int* A, int n)
  48. {
  49.         int* temp = new int[n];
  50.         int ans = MergeSort1(A, temp, 0, n - 1);
  51.         free((char*)temp);
  52.         return ans;
  53. }
  54. int main()
  55. {
  56.         int n;
  57.         int number;
  58.         cout << "請輸入數組的大小:" << endl;
  59.         cin >> n;
  60.         while (n <= 0) {
  61.                 cout << "輸入的數據有誤,請重新輸入:" << endl;
  62.                 cin >> n;
  63.         }
  64.         int* A = new int[n];
  65.         cout << "請輸入數組A中的各個元素:" << endl;
  66.         for (int i = 0; i < n; i++) {
  67.                 cin >> A[i];
  68.         }
  69.         number = MSort(A, n);
  70.         cout << "A中逆序對的數量為:" << number;
  71.         return 0;
  72. }
復制代碼


全部資料51hei下載地址:
第四次作業.docx (256.54 KB, 下載次數: 9)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费观看 | 国产探花在线精品一区二区 | 国产最新网址 | 国产免费一区二区三区 | 国产黄色小视频在线观看 | 久久综合亚洲 | 精品亚洲一区二区三区四区五区 | 一区二区精品电影 | 中文字幕一区在线观看视频 | 亚洲一二三区不卡 | 成人欧美一区二区三区黑人孕妇 | 一级二级三级在线观看 | 成人网av| 精品无码久久久久国产 | 欧美aⅴ| 中文字幕在线视频一区二区三区 | 久久免费精品视频 | 在线视频成人 | 亚洲欧美在线视频 | 凹凸日日摸日日碰夜夜 | 日韩电影免费在线观看中文字幕 | 免费亚洲视频 | 在线观看国产www | 精品亚洲一区二区三区四区五区高 | 精品国产乱码一区二区三 | a国产一区二区免费入口 | 可以免费观看的av片 | 久久久久久久久久久久久久av | 日韩高清国产一区在线 | 久久精品免费 | 91麻豆精品国产91久久久资源速度 | 黄色在线免费观看视频网站 | 日韩www视频 | 久久亚洲天堂 | 国产成视频在线观看 | 欧美精品一区二区三区在线播放 | 亚洲第一天堂无码专区 | 色婷婷综合在线观看 | 久久精品中文字幕 | 一区二区高清 | 免费h视频 |