资源限制
时间限制:1.0s 内存限制:512.0MBc++
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200算法
输入格式
第一行为一个整数n。第二行包含n个整数,为待排序的数,每一个整数的绝对值小于10000。ide
输出格式
输出一行,按从小到大的顺序输出排序后的数列。函数
样例输入
5
8 3 6 4 9ui
样例输出
3 4 6 8 9spa
快排排序方式代码展现
#include<cstdio> #include<stdlib.h> using namespace std; // 该算法查找序列中第一个值的最终位置,并对序列进行一次排序 int location(int *arys,int start,int end) { int temp = arys[start]; //如下while中的算法不明白能够画图推算 while(start<end) { if(arys[end]>temp)end--;//从尾部向前查找第一个比temp值小的值end arys[start]=arys[end];//将end值存入偏头部start值 if(arys[start]<temp)start++;//从头部向后查找第一个比temp值大的值start arys[end]=arys[start];//将start值存入偏尾部end位置 } arys[start]=temp;//将序列中的第一个值放到最终位置 return start; } //递归进行快排排序 int quick_sort(int *arys,int start,int end) { //快排未结束标志 if(start<end) { int n = location(arys,start,end);//查找序列中第一个值的最终位置 quick_sort(arys,start,n-1);//对序列从start位置到n-1位置进行快排 quick_sort(arys,n+1,end);//对序列从n+1位置到end位置进行快排 } } int main() { int arys[200]={0},n;//定义并初始化序列arys,定义n值 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arys[i]); } quick_sort(arys,0,n-1);//对arys进行快排 for(int i =0;i<n;i++) { printf("%d ",arys[i]); } system("pause"); return 0; }
快排排序方式算法之个人总结
交换排序方式代码展现
#include<cstdio> #include<stdlib.h> using namespace std; int main() { int arys[200]={0},n;//定义并初始化序列arys,定义n值 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arys[i]); } //进行交换排序 int min=0,mid;//min为序列中最小值得位置,mid为交换的中间过渡值 //从第i值开始,将从第i+1个值到n-1值中最小的值与第n个值交换,i从0到n-1. for(int i=0;i<n;i++) { min = i; //记录i+1到n-1对应arys中最小值的位置 for(int j=i+1;j<n;j++) { if(arys[j]<arys[min]) { min = j; } } if(min!=i)//这里使用剪支法,若min值为i值也就是没有进行上面的记录for循环 { mid = arys[min]; arys[min] = arys[i]; arys[i] = mid; } } //打印排序后的arys序列 for(int i =0;i<n;i++) { printf("%d ",arys[i]); } system("pause"); return 0; }
交换排序算法之个人总结