题目:
找一列数种的第kth个数。
思路:
这个题要求的效率要高一些。如果按照每次选一段数字出来,快排后找kth数,效率不够。但是记录计数连同序号一起记录的话,只只需要排序一次就够了。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 100001
typedef struct{
int data;
int index;
}ARRAY;
ARRAY array[N];
int partition(int low, int high)
{
ARRAY tmp = array[low];
while(low < high)
{
while(low<high && array[high].data > tmp.data)
high --;
if(low < high)
array[low] = array[high];
while(low < high && array[low].data < tmp.data)
low ++;
if(low < high)
array[high] = array[low];
}
array[low] = tmp;
return low;
}
void sort(int low, int high)
{
int index;
if(low < high)
{
index = partition(low, high);
sort(low, index-1);
sort(index+1, high);
}
}
main()
{
int i, j, x, y, k, t=0, num1, num2;
scanf("%d %d",&num1, &num2);
for(i=1;i<=num1;i++)
{
scanf("%d",&array[i].data);
array[i].index = i;
}
sort(1,num1);//针对array排序
for(i=1;i<=num2;i++)
{
t = 0;
scanf("%d %d %d",&x,&y,&k);
for(j=1;j<=num1;j++)
if((array[j].index<=y)&&(array[j].index >=x))
{
t++;
if(t == k)
break;
}
printf("%d\n",array[j].data);
}
// system("pause");
return 0;
}