用C随机函数生成n个随机数,然后用归并法排序
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/20 08:54:12
用C随机函数生成n个随机数,然后用归并法排序
/*
快排么.网上一搜就一堆了.算法只是一种思想或说成一种方法而已,并非就C语言.其它语言也一样
快排也有点像二路归并:从一个无序的序列中随机取出一个值q做为支点,然后把大于q的放到一边,小于q的放到q的另一边,然后再以q为分界点,分别对q的两边
进行排序(快排时直接再对q两边重新取支点,整理,再取支点,...直到支点两旁都有序.也就是支点两旁只有一个数时)
*/
#include <stdio.h>
#include <stdlib.h>
int Qsort(int p[],int beg,int end)
{
if(beg+1>=end)return 0;//退出递归
int low,hight,q;
low=beg;
hight=end;
q=p[low];//q为支点,其实q可以为随机数.但相应以下程序就要改了
while(1){
while(low<hight && p[hight]>q)hight--;
if(low>=hight)break;
p[low++]=p[hight];
while(low<hight && p[low]<q)low++;
p[hight++]=p[low];
}
p[low]=q;
Qsort(p,beg,low-1);
Qsort(p,low+1,end);
}
int main()
{
int i,a[]=;
Qsort(a,0,sizeof(a)/4-1);
for(i=0;i<sizeof(a)/4;i++)printf(" %d ",a[i]);
system("pause");
return 0;
}
快速排序的优势和支点元素的选择有关系.
所选支点元素每次递归后都在最前面或最后面.这样情况就会最差了.
我们知道一般的排序.(如冒泡.)在一个数组p[m,n]中排序.都是确定最大或最小,而确定最大值(最小值)要经过n-m-1次比较.
而整个过程就差不多是(n-m-1)!次比较.
快排中:一次比较可以确定支点元素的位置.若p[m,q,n](q为支点元素).当然确定第一个元素也是要比较(n-m-1)次.但第二个,第三个(第二层)就是(q-m-1)和(n-q-1)次比较.
明显q的值若为m或n,快排就没有什么优势了
快排么.网上一搜就一堆了.算法只是一种思想或说成一种方法而已,并非就C语言.其它语言也一样
快排也有点像二路归并:从一个无序的序列中随机取出一个值q做为支点,然后把大于q的放到一边,小于q的放到q的另一边,然后再以q为分界点,分别对q的两边
进行排序(快排时直接再对q两边重新取支点,整理,再取支点,...直到支点两旁都有序.也就是支点两旁只有一个数时)
*/
#include <stdio.h>
#include <stdlib.h>
int Qsort(int p[],int beg,int end)
{
if(beg+1>=end)return 0;//退出递归
int low,hight,q;
low=beg;
hight=end;
q=p[low];//q为支点,其实q可以为随机数.但相应以下程序就要改了
while(1){
while(low<hight && p[hight]>q)hight--;
if(low>=hight)break;
p[low++]=p[hight];
while(low<hight && p[low]<q)low++;
p[hight++]=p[low];
}
p[low]=q;
Qsort(p,beg,low-1);
Qsort(p,low+1,end);
}
int main()
{
int i,a[]=;
Qsort(a,0,sizeof(a)/4-1);
for(i=0;i<sizeof(a)/4;i++)printf(" %d ",a[i]);
system("pause");
return 0;
}
快速排序的优势和支点元素的选择有关系.
所选支点元素每次递归后都在最前面或最后面.这样情况就会最差了.
我们知道一般的排序.(如冒泡.)在一个数组p[m,n]中排序.都是确定最大或最小,而确定最大值(最小值)要经过n-m-1次比较.
而整个过程就差不多是(n-m-1)!次比较.
快排中:一次比较可以确定支点元素的位置.若p[m,q,n](q为支点元素).当然确定第一个元素也是要比较(n-m-1)次.但第二个,第三个(第二层)就是(q-m-1)和(n-q-1)次比较.
明显q的值若为m或n,快排就没有什么优势了
利用随机函数产生30000个随机整数,利用插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序等排序方法进
用随机函数长生N个2位函数,用选择法排序后将他们按值从小到大排序输出!
C# 用random方法从1-100中随机产生n个随机数 然后把这n个随机数从这100个数中剔除出去
请问有哪路高手能教一下:用C编一个函数,生成N个互不相等的随机数
C语言:生成20个随机数,然后把它们排序,最后要把排序前和排序后的数都显示出来.
VB的:用随机函数产生n个三位整数,用选择法排序后将它们的值从大到小输出,n=204!
用excel生成N个随机数,如何用if函数使它不重复
利用随机函数生成并输出8个1—10之间的随机整数,然后对这一组数从小到大进行排序,
给定一个数列,如何用归并排序算法把它排成升序,用c语言实现.
用MATLAB提供的rand函数生成10个符合均匀分布的随机数,然后各个随机数与0比较,大于零输出1,小于零输出0.
vb中随机生成10个10~90的整数,把能被3整除的随机数从小到大排序
C语言随机数序列编程:用C语言程序编写.生成随机数序列.范围:1-15要求生成1-15的随机序列,中间无重复