只要先进行一次排序就行
int one(int s[], int low, int high)
{
int flag = s[low];
while (low < high)
{
while (s[high] <= flag && low < high)
{
high--;
}
if (s[high] > flag)
{
s[low] = s[high];
}
while (s[low] >= flag && low < high)
{
low++;
}
if (s[low] < flag)
{
s[high] = s[low];
}
}
s[low] = flag;
return low;
}
int quick(int s[], int low, int high)
{
int ret;
if (low < high)
{
ret = one(s, low, high);
quick(s, low, ret - 1);
quick(s, ret + 1, high);
}
return 0;
}
int main(int argc, const char *argv[])
{
int s[15] = {45, 26, 15, 49, 85, 16, 39, 88, 55, 44, 61, 0, 34, 33, 51};
int temp[15] = {0};
int i = 0, num;
for (i = 0; i < 15; i++)
{
temp[i] = s[i];
} /*备份原数组*/
quick(temp, 0, 14); //进行快速排序
printf("数组成员有:\n");
for (i = 0; i < 15; i++)
{
printf("%d ", temp[i]);
} /*查看快速排序是否成功*/
printf("\n");
LOOP:
printf("请输入想要知道第几大的数据的位置(1-15)(999-退出) > ");
scanf("%d", &num);
while (getchar() != '\n')
;
if (num >= 1 && num <= 15 && num != 999)
{
for (i = 0; i < 15; i++)
{
if (s[i] == temp[num + 1])
{
break;
}
}
printf("排序第%d大的数,下标是%d\n", num, i);
goto LOOP;
}
else if (num == 999)
{
}
else
{
printf("输入不在范围内,请重新输入\n");
goto LOOP;
}
return 0;
}
原文地址:https://www.jb51.cc/wenti/3281097.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。