poj 2104_变种快排
2013-05-02 10:24
351 查看
题目:
找一列数种的第kth个数。
思路:
这个题要求的效率要高一些。如果按照每次选一段数字出来,快排后找kth数,效率不够。但是记录计数连同序号一起记录的话,只只需要排序一次就够了。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 100001
typedef struct{
int data;
int index;
}ARRAY;
ARRAY array
;
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;
}
找一列数种的第kth个数。
思路:
这个题要求的效率要高一些。如果按照每次选一段数字出来,快排后找kth数,效率不够。但是记录计数连同序号一起记录的话,只只需要排序一次就够了。
代码:
#include <stdio.h>
#include <stdlib.h>
#define N 100001
typedef struct{
int data;
int index;
}ARRAY;
ARRAY array
;
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;
}
相关文章推荐
- poj 1125 Stockbroker Grapevine
- poj 数论 Semi-prime H-numbers
- poj 3128 Leonardo's Notebook
- poj&nbsp;3169&nbsp;Layout(差分约束)
- poj&nbsp;1159&nbsp;Palindrome(DP)
- poj&nbsp;1135&nbsp;Domino&nbsp;Effect(dij)
- POJ&nbsp;2000
- poj 1860 最短路
- poj 1251
- poj 1733 并查集+偏移向…
- poj 2983 中等的差分约束
- poj 2662 最短路算法的扩展应用
- POJ 2262 Goldbach's Conjecture(…
- POJ 1658 Eva's Problem(水到极点)
- poj 1125_迪杰斯特拉
- A Bug's Life -Poj
- ACM: 图论题 poj 1789 (一次AC的水…
- ACM: 模拟题 poj 2996
- ACM: dp题(动态规划) poj 2151 (d…
- ACM: 哈希暴力求解 哈希题 poj 184…