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

---------------------------------------------------------------------------------------------------
                                      高效排序
时间限制: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]); } }

你可能感兴趣的:(数据结构,算法,gcc,语言,2010)