设有一个N组数,要确定第K大的数

来源:互联网 发布:java杨辉三角 简单代码 编辑:程序博客网 时间:2024/05/16 17:55

方法一:

#include <iostream>
using namespace std;

int number[30] = {
1, 12, 23, 24, 15, 26, 17, 8, 9, 10,
11, 2, 13, 14, 5, 16, 7, 18, 19, 20,
21, 22, 3, 4, 25, 6, 27, 28, 29, 30
};

void find(int k)
{
//进行排序
//int m = number[1];
for (int i = 0; i <= 29; ++i)
{
for (int j = i+1; j <= 29; ++j)
{
if (number[i] < number[j])
{
//交换两个数1:
/*int temp = 0;
temp = number[i];//temp中保存了number[i]中的值
number[i] = number[j];//number[i]中保存了number[j]中的值
number[j] = temp;//number[j]中保持了temp中的值,即保存了number[i]中的值
*/
//交换两个数2:
/*number[i] = number[i] + number[j];
number[j] = number[i] - number[j];
number[i] = number[i] - number[j];
*/
//交换两个数3:
number[i] = number[i] ^ number[j];
number[j] = number[i] ^ number[j];
number[i] = number[i] ^ number[j];
}
}
}

cout << "排序后的值:" << endl;
//输出排序后的数
for (int i = 0; i <= 29; ++i)
{
cout << number[i] << "、";
if (0 == (i + 1) % 10)
{
cout << endl;
}
}


cout << endl;
cout << number[k-1] << endl;
}

int main()
{

int k;
cout << "请输入k值:" << endl;
cin >> k;

cout << "排序前的值:" << endl;
//排序前的数
for (int i = 0; i <= 29; ++i)
{
cout << number[i] << "、";
if (0 == (i + 1) % 10)
{
cout << endl;
}
}

cout << endl;

find(k);
return 0;
}

方法二:

#include<iostream>

using namespace std;

//int k , a[] = {1,5,3,4, 6};
int k, a[] = {
1,12,3,24,15,6,27,8,19,30,
11,2,23,14,5,16,17,18,9,20,
21,22,13,4,25,26,7,28,29,10
};

void find(int k)
{
for (int i = 0; i <k; ++i)
{
for (int j = i + 1; j < k; ++j)
{
//将数组中前k个数进行排序
if (a[i] < a[j])
{
a[i] = a[i] ^ a[j];
a[j] = a[i] ^ a[j];
a[i] = a[i] ^ a[j];
}
}
}
for (int m = 0; m < 30; ++m)
{
cout << a[m] << ",";
if (0 == (m+1) % 10)
{
cout << endl;
}
}

//将第k个以后的元素与前面a[k-1]元素相比较,若大则替换前面的元素,并重新进行前k个数的排序
for (int n = k; n < 30; ++n)
{
if (a[k-1] < a[n])
{
a[k-1] = a[n];
for (int i = 0; i <k; ++i)
{
for (int j = i + 1; j < k; ++j)
{
//将数组中前k个数进行排序
if (a[i] < a[j])
{
a[i] = a[i] ^ a[j];
a[j] = a[i] ^ a[j];
a[i] = a[i] ^ a[j];
}
}
}
}
}
cout << endl;
//输出判断后的前k个数的排序结果
for (int z = 0; z < 30; ++z)
{
cout << a[z] << ",";
if (0 == (z+1) % 10)
{
cout << endl;
}
}
cout << endl;
cout << a[k-1];
}

int main()
{
cout << "请输入k指值:" ;
cin >> k;

find(k);
cout << endl;
return 0;
}
0 0