用遞迴的合併排序對如下資料進行排序(45, 23, 65, 57, 38, 2, 96, 87, 14, 70 )
合併排序演算法是用分治策略實現對n個元素進行排序的演算法;
基本思想:
將待排序陣列分為成分大小大致相同的2個子集和;
分別對兩個子集和進行排序;
合併兩個排序後的子集和。
**實現:(時間複雜度:o(nlongn))
#includeusing namespace std;
void merge(int a,int start,int end,int b)//合併
return;
}else if(0==end-start)
return;
else
}int main()
; const int length = 10;
int b[length];
cout << "排序前:" << endl;
for(int i = 0;i < length;++i)
cout << a[i] << " ";
cout << endl;
cout << "排序後:" << endl;
mergesort(a,0,length-1,b);
for(int i = 0;i < length;++i)
cout << a[i] << " ";
cout << endl;
return 0;
}
排列a中若存在iaj,則稱是該排列的乙個逆序,乙個排列含有逆序的個數稱為該排列的逆序數。例如排列2 6 3 4 5 1中含有8個逆序<2, 1>、<6, 3>、<6, 4>、<6, 5>、<6, 1>、❤️, 1>、<4, 1>、<5, 1>。利用分治思想設計演算法,計算給定排列的逆序數。
在合併排序的基礎上加計數器計算逆序數。
#includeusing namespace std;
int count=1;//計數器
void merge(int a,int start,int end,int b)
return;
}else if(0==end-start)
return;
else
}int main()
; const int length = 6;
int b[length];
cout << "排序前:" << endl;
for(int i = 0;i < length;++i)
cout << a[i] << " ";
cout << endl;
cout << "排序後:" << endl;
mergesort(a,0,length-1,b);
for(int i = 0;i < length;++i)
cout << a[i] << " ";
cout<設a 是n個數構成的陣列,其中出現次數最多的數稱為眾數,設計乙個演算法求a的眾數。
首先對陣列進行排序,及在合併排序的基礎上求眾數。
對陣列進行遍歷,求出數量最多的那個數。
//新增上合併排序的**段
void most(int a,int length)
if (maxcount < count)
++j;
i = j;
} cout <<"眾數:" <}
遞迴實現合併排序
subject 計算機演算法設計與分析 title 2.7.1 遞迴實現合併排序 coder hao class 計科0906 num 0304090614 date sept 25th,2011 includeusing namespace std 用於合併的函式 template void me...
歸併排序(合併排序) 遞迴法
參考了一些大佬的 再自己總結了一下。原理基本不變。歸併排序 合併排序 是一種分治演算法。這個演算法不斷地將乙個陣列分為兩部分,分別對左子陣列和右子陣列排序,然後將兩個陣列合併為新的有序陣列。穩定 是 時間複雜度 最優 o nlog n 最差 o nlog n 平均 o nlog n include ...
排序(2)歸併排序(遞迴 合併排序)
用到遞迴 合併,所以叫歸併。public static int data 遞迴 param temp 臨時陣列 param sindex 開始索引 param eindex 結束索引 private static void recursion int temp,int sindex,int eind...