日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组2——查找第k小元素

發布時間:2023/12/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组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小元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。