数组2——查找第k小元素
生活随笔
收集整理的這篇文章主要介紹了
数组2——查找第k小元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在數組a的前n個元素中找出第k(1≤k≤n)小的元素,例如,數組{98, 33, 21, 102, 45, 5, 32, 11, 65, 82, 193, 321, 34, 72}中第5小的元素是33。
【分析】
這是上海大學考研試題。要查找第k小的元素,并不需要完全對數組中的元素進行排序,可以利用快速排序算法思想,只對部分元素進行排序就可以找到第k小元素。
一趟排序結束后,若i==k,說明找到了第k小元素,算法結束。否則,如果i<k,則說明第k小元素在i=1----high之間;如果i>k,則表明第k小元素在low----i-1之間。最后返回最小元素a[k]。
main.cpp
#include <iostream> #include <iomanip> using namespace std; #define MAX 100 int Search_K_Min(int a[],int n,int k); void PrintArray(int a[],int n); void main() {int a[] = { 98, 33, 21, 102, 45, 5, 32, 11, 65, 82, 193, 321, 34, 72 };int n, k, x;n = sizeof(a) / sizeof(a[0]);cout << "請輸入要查找第幾小的元素值:" << endl;cin >> k;x = Search_K_Min(a, n, k);cout << "數組中的元素:"<<endl;PrintArray(a, n);cout << "第" << k << "小的元素值是:";cout << x << endl;system("pause"); }int Search_K_Min(int a[], int n, int k) {int low, high, i, j, t;k--;low = 0;high = n - 1;do {i = low;j = high;t = a[low];do {while (i<j&&t<a[j]){j--;}if (i<j){a[i++] = a[j];}while (i<j&&t>=a[i]){i++;}if (i<j){a[j--] = a[i];}} while (i<j);a[i] = t;if (i==k){break;}if (i<k){low = i + 1;}else{high = i - 1;}} while (i!=k);return a[k]; }void PrintArray(int a[], int n) {int i;for (i = 0; i < n;i++){cout << setw(4) << a[i];}cout << endl; }結果:
總結
以上是生活随笔為你收集整理的数组2——查找第k小元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2×3卡方检验prism_SPSS系列|
- 下一篇: sanic学习踩坑记录:第一坑——san