只要先进行一次排序就行
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;
}