算法设计与分析(第四周)同时选最大和最小 优化解法
思路
首先把n個(gè)數(shù)分成兩部分,每部分有n/2個(gè)數(shù)
然后把第一部分的數(shù)分別與第二部分對(duì)應(yīng)位置的數(shù)比較,如果左邊的大,就SWAP
一輪下來(lái)之后,數(shù)列被分成兩半,最小數(shù)肯定在左邊,最大數(shù)肯定在右邊
再?gòu)淖筮呎业阶钚?shù),從右邊找到最大數(shù)
此算法可有效降低時(shí)間復(fù)雜度
運(yùn)行效果
321 458 1 164 326 129 51 841 786 321 54 558 996 665 542 521 718 48 650 854 845 165 641 817 832 400 802 975 61 749 24 430 713 851 326 770 767 64 807 249 98 511 833 785 150 796 923 96 28 767 293 604 12 48 6 565 464 930 908 656 22 114 431 117 951 66 175 971 366 209 848 114 963 998 347 417 816 741 255 945 595 168 55 186 574 458 653 877 35 992 591 609 140 689 778 674 370 752 29 679
最小:1
最大:998
請(qǐng)按任意鍵繼續(xù). . .
代碼
//優(yōu)化解法 同時(shí)選最大和最小 #include<iostream> #define SWAP(a,b) {int t;t=a;a=b;b=t;} #define NUM 100//總個(gè)數(shù) using namespace std; int main() {int a[NUM];//輸入int i;for (i = 0; i < NUM; i++){cin >> a[i];}//比較偶數(shù)個(gè)int max, min;for (i = 0; i < NUM / 2; i++){if (a[i] > a[NUM / 2 + i]){SWAP(a[i], a[NUM / 2 + i]);//小的放左邊}}//找最小min = a[0];for (i = 0; i < NUM / 2; i++){if (a[i] < min){min = a[i];}}//找最大max = a[NUM / 2];for (i = NUM / 2; i < NUM; i++){if (a[i] > max){max = a[i];}}if (NUM % 2 != 0)//奇 最后輪空{if (a[NUM - 1] < min)min = a[NUM - 1];if (a[NUM - 1] > max)max = a[NUM - 1];}//輸出cout << "最小:" << min << endl;cout << "最大:" << max << endl;system("pause"); }總結(jié)
以上是生活随笔為你收集整理的算法设计与分析(第四周)同时选最大和最小 优化解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# 学生成绩管理系统 完整版
- 下一篇: 算法设计与分析(第四周)大整数相乘 分治