在《資料結構與演算法分析——c語言描述》的引論中有提到乙個問題:
設有一組n個數而要確定其中第k個最大者。
被稱為選擇問題(selection problem)。
後面有提到兩種演算法,下面是我根據描述,寫的**:
/*
* 題目:選擇性問題,從n個數中找出第k大者
* * */
#include #include /*
* 輸出陣列
* */
void printfarray(int arr, int n)
printf("\n");}/*
* 氣泡排序
* */
void bubble_sort(int arr, int n)
} }}/*
* 對陣列進行排序,返回第k-1位置上的元素即為第k大者
* */
int getmaxk1(int arr, int n, int k)
bubble_sort(tmp, n);
int ret = tmp[k - 1];
free(tmp);
tmp = null;
return ret; }/*
* 1 讀入陣列前k個元素並排序
* 2 將餘下的元素依次與第k-1個元素對比,小則忽略
* 3 大則插入陣列的合適位置,同時擠出最後乙個元素
* 4 然會第k-1位置上的元素, 排序
* */
int getmaxk2(int arr, int n, int k)
bubble_sort(tmp, k);
int j = 0;
for (j = i; j < n; ++j)
} printfarray(tmp, k);
int ret = tmp[k - 1];
free(tmp);
tmp = null;
return ret;
}int main() ;// 10個數:0-9
int k = 3;// 找第3大者
printf("%d\n", getmaxk1(arr, 10, k)); // 輸出7
printf("%d\n", getmaxk2(arr, 10, k)); // 輸出7
return 0;
}
資料結構與演算法分析
資料結構與演算法分析可以稱得上是程式設計師必須修煉的內功心法。資料的儲存結構 資料元素在計算機中的儲存方式 資料的操作集合 對一種資料型別的資料所有操作,例如對資料的增刪改查等等!演算法分析主要分析 下面是一些常用資料結構 一 線性表 1.陣列實現 2.鍊錶 二 棧與佇列 三 樹與二叉樹 1.樹2....
資料結構與演算法分析
資料結構 大量資料的組織方法 演算法分析 演算法執行時間的估算。涉及到計算效率。設想,如果能把時間限制從16年減至不到1秒,不很神奇嗎?在很多問題中,乙個重要的觀念是 寫出乙個可以工作的程式並不夠。如果這個程式在巨大的資料集上執行,執行時間就成了重要的 問題。演算法,是為求解乙個問題需要遵循的 被清...
資料結構與演算法 選擇演算法 selection
選擇演算法指的是解決選出序列中第n大的元素。比如中位數。方法如下 1.使用priorityqueue,維持size為k,如果queue的size小於k,則直接加入,否則看最小的元素能否比得過,比得過就剔除最小元素,加入新元素,比不過就看後面的元素,最後返回堆頂元素即可。這裡需要使用最小堆。publi...