数据结构与算法练习题之高效排序
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、快速排序算法;
****************************************
*/
高效排序
时间限制: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]); } }
相关文章推荐
- 【练习】数据结构与算法练习题之高效排序
- 数据结构与算法C++ 第二章 练习题 Part-B (排序乐园升级版)
- 数据结构与算法总结——排序(一)简单排序
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)
- 【数据结构与算法】选择排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 数据结构与算法--快速排序
- 数据结构与算法学习-简单排序算法之插入排序
- 数据结构与算法-排序(三)
- 数据结构基础算法整理归纳:选择排序(四)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构与算法中的拓扑排序方法
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 数据结构之排序算法之O(nlogn)
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构算法之排序系列Java、C源码实现(3)--直接选择排序
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)
- 数据结构与算法-----快速排序
- 【数据结构与算法 00】二分插入排序