您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法练习题之高效排序

2010-12-01 21:21 302 查看
---------------------------------------------------------------------------------------------------
高效排序
时间限制:1000 ms | 内存限制:65536 KB
描述
比普通排序快一些的排序。

输入
第一行包含一个整数T,表示有T组数据。对于每组数据:第一行包含一个数字N(<100,000),
表示该组数据由N个元素;第二行包含N个数,就是这N个元素的值( <100,000 )。

输出
对于每组数据输出一行,包含排序好后的N个元素,要求从小到大排序,相邻2个元素间有个空格,末尾无空格有个回车。

样例输入
1
3
1 3 2
样例输出
1 2 3
-------------------------------------------------------------------------------------------------------

运行结果:
****************************************
用户 结果 时间 内存 语言 提交时间
Ljhero 正确 100ms 468KB gcc 2010-12-01 20:43
****************************************
练习总结:
****************************************
1、根据用户的输入生成特定长度的数组:
首先,根据输入的T,生成长度为T的指针数组,数组中的元素为指针,指向数组。
然后,根据输入的N,生成长度为N的数组,再根据输入的N个数,给这个数组赋值。
2、快速排序算法;
****************************************
*/

#include <stdio.h>
#include <stdlib.h>

int	partitions(int *p,int low,int high)
{
int pivotkey=p[low];
while(low<high)
{
while(low<high && p[high]>=pivotkey)
--high;
p[low]=p[high];
while(low<high && p[low]<=pivotkey)
++low;
p[high]=p[low];
}
p[low]=pivotkey;

return low;
}
void QuickSort(int *p,int low,int high)
{
int pivottag;
if (low<high)
{
pivottag=partitions(p,low,high);
QuickSort(p,low,pivottag-1);
QuickSort(p,pivottag+1,high);
}

}
void main(void)
{
int iArryNum,i,j;
int **iparry;
int *ipNum;
scanf("%d",&iArryNum);
iparry=(int **)malloc(sizeof(int *)*iArryNum);//根据输入的数组数量生成特定长度的指针数组
ipNum=(int *)malloc(sizeof(int *)*iArryNum);
for (i=0;i<iArryNum;i++)
{
scanf("%d",&ipNum[i]);
iparry[i]=(int *)malloc(sizeof(int)*ipNum[i]);//根据输入的数组长度生成数组
for (j=0;j<ipNum[i];j++)
{
scanf("%d",&iparry[i][j]);

}
QuickSort(iparry[i],0,ipNum[i]-1);//使用快速排序算法进行排序
}

for (i=0;i<iArryNum;i++)
{

for (j=0;j<ipNum[i]-1;j++)
{
printf("%d ",iparry[i][j]);

}
printf("%d/n",iparry[i][j]);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: