永发信息网

急求,请编程高手用冒泡排序法帮我编写一个找出一个整数数组中第K大的数的程序~

答案:3  悬赏:20  手机版
解决时间 2021-11-15 07:44
  • 提问者网友:呐年旧曙光
  • 2021-11-15 01:35
急求,请编程高手用冒泡排序法帮我编写一个找出一个整数数组中第K大的数的程序~
最佳答案
  • 五星知识达人网友:拾荒鲤
  • 2021-11-15 02:49
数组为:12 3 5 6 33 78 23 23 99
请问要找第几大:3
33
Press any key to continue
#include "stdio.h"

int main()
{
int i,j,tmp,a[]={12,3,5,6,33,78,23,23,99};
printf("数组为:");
for (i=0;i<9;i++)
{
printf("%d ",a[i]);
}
printf("\n");
for (i=0;i<10-1;i++)
{
for (j=0;j<10-i-1;j++)
{
if (a[j] {
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
printf("请问要找第几大:");
scanf("%d",&tmp);
printf("%d\n",a[tmp-1]);
return 0;
}
全部回答
  • 1楼网友:行路难
  • 2021-11-15 04:38
import java.util.Scanner;

public class InArry {

public static void main(String[] args)
{
int[] a = new int[5];
System.out.println("********请输入 5个整数***********");
Scanner sc = new Scanner(System.in);

for (int i = 0; i < a.length; i++)
{
a[i] = sc.nextInt();
}

int temp;
boolean flag=true;

for(int i=a.length-1;i>0&& flag ;i--)
{
for(int j=0;j {
flag=false;
if(a[j] < a[j+1])
{
flag=true;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;

}
}

}
System.out.print("其由小到大排序为:");
for(int i=0;i System.out.print(a[i]+" ");

}
for(int i=0;i<5;i++){
System.out.println("\n"+"请输入第?大数字(1为最大)");
Scanner sa=new Scanner(System.in);
System.out.println("第"+sa.nextInt()+"大数字是:"+a[sa.nextInt()-1]);
}

}
}

这是java写的,不过你可以看一下,语法基本相同,道理一全部样..。。
  • 2楼网友:狂恋
  • 2021-11-15 03:38

如果光是求“最大数”的话,根本用不着冒泡排序吧……
而且这个冒泡排序,居然是用指针的……
第一行:定义一个整数数组,然后让一个整形指针指向这个数组(的头部)
第二行:定义ij两个循环计量,temp是交换用的中间变量,size是数组长度
第三行:用a的内存长度,除以int型的内存长度,得到的是a的数组长度,但听说最好不要这么用
第四行往下:循环开始

具体方法就是,先让第0个元素,跟第1个元素比较,当前者大于后者时,交换两者的值
然后让第0个元素,跟第2个元素比较,同样规则交换,直到第0元素比第size-1元素
当第0个元素跟其它所有元素比较过后,第0元素即为当前数组里最小的
因为每次都让更小的元素归到第0的位置

然后再让第1个元素跟后续的那些元素比较,以此类推,每次都把小数往前移
最后比较到第size-2跟第size-1个元素完成后,这个数组就完成排列了

代码最后两行是按顺序输出数组的值,应该是从小到大排列的。

如果你题目只是取最大值的话,根本不用这么写。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯