实验一
寻找序列中第K小元素
1. 实验内容
实现一个从数组中寻找第K小元素算法。
2. 实验目的
掌握分治法的基本思想
3. 实验题目
本实验要求实现以下功能:
- 输入一个乱序的数组和k值。
- 从数组中寻找第k小元素。
c++,vs2022
#include <iostream> using namespace std; int findk(int a[], int s, int t, int k) { int i = s, j = t, tmp = 0; if (i >= j) { return a[k - 1]; } else { tmp = a[s]; while (i != j) { while (j > i && a[j] >= tmp) { j--; }//寻找后区较小值 a[i] = a[j];//较小值 while (j > i && a[i] <= tmp) { i++; } a[j] = a[i]; } a[i] = tmp; if (k - 1 == i) { return a[i]; } if (k - 1 < i) { return findk(a, s, i - 1, k); } else { return findk(a, i + 1, t, k); } } } int main() { //输入 int a[100]; int i = 0, j = 0; for (i = 0; i < 100; i++) { a[i] = 0; } i = 0; cout << "输入无序数组,-1结束输入" << endl; while (1 == 1) { cin >> j; if (j == -1) { break; } a[i] = j; i++; } system("cls"); cout << "无序数组:"; for (j = 0; j < i; j++) { cout << a[j] << " "; } cout << endl << "输入n:"; int n = 1; cin >> n; //数据处理 //数据在[0,i)间 int as = findk(a, 0, i - 1, n); if (as == -1) { return 0; } cout <<"结果:" << as; return 0; }