标题:如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、 ...
只看楼主
牧云晨曦
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-12-26
结帖率:0
已结贴  问题点数:20 回复次数:2 
如何实现以下功能给出1000个通过随机数生成的数据,分别用直接插入排序法、冒泡排序法、快速排序法进行排序
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
void create();
void InsertSort(int a[],  int length);
void BubbleSort(int a[],  int length);
void QKSort(int a[],  int length);
void main() /*主函数即用户的操作界面*/
{
int b,flag=0; /*声明局部变量*/
while(1) /*循环输出以下信息*/
{

printf("**************************--------------------主菜单--------------------************************\n");
printf("***************-------------------------------排序-----------------************************\n");
printf(" 1.新建随机生成1000数 \n");
printf(" 2.直接插入排序法进行排序 \n");
printf(" 3.冒泡排序法进行排序 \n");
printf(" 4.快速排序法进行排序 \n");
printf(" 0.退出 \n");
printf(" 请输入选项0-4 \n");
printf(" 请输入你的选择:" );
scanf("%d",&b);
switch(b)
{
case 1:create();break;
case 2:InsertSort(int a[],int length);break;/*直接插入排序法*/
case 3:BubbleSort(int a[],int length);break;/*冒泡排序法*/
case 4:QKSort(int a[],  int length);break; /*快速排序法进行排序*/
case 0:flag=1;break;/*退出SWITCH语句*/
default :printf("错误!");
}
if(flag) break; /*如果选择0就退出循环*/
}
}
void create()
{
    int a[1000];
srand((unsigned)time(NULL));
for(int i=0;i<1000;i++)
{

a[i]=rand()%1000;printf("%d\t",a[i]);
if(i%10==0)
printf("\n");
}
}
void InsSort(int a[],  int length)
/* 对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
{  
    int i,j;
    for (i=2;i<=length;i++)  
    {
        a[0]=a[i];      /*将待插入记录存放到监视哨r[0]中*/
        j=i-1;              
        while (a[0]< a[j] )     /* 寻找插入位置 */
        {
            a[j+1]= a[j];  
            j=j-1;
        }
        a[j+1]=a[0];                 /*将待插入记录插入到已排序的序列中*/
    }
} /*  InsSort  */  
void  BubbleSort(int a[], int length )
/*对记录数组r做冒泡排序,length为数组的长度*/
{
    int n,i,j;
    int change;
    RecordType x;
    n=length;   
    change=TRUE;
        for ( i=1 ; i<= n-1 && change ;++i )  
        {
            change=FALSE;
                for ( j=1 ; j<= n-i ; ++j)  
                    if (a[j]> a[j+1] )   
                    {
                        x= a[j];
                        a[j]= a[j+1];
                        a[j+1]= x;
                        change=TRUE;
                    }  
        }
} /*  BubbleSort  */  
void QKSort(int a[],int low, int high )
/*对记录数组r[low..high]用快速排序算法进行排序*/
{
    int pos;
    if(low<high)
    {
        pos=QKPass(a, low, high);  /*调用一趟快速排序,将枢轴元素为界划分两个子表*/
        QKSort(a, low, pos-1);     /*对左部子表快速排序*/
        QKSort(a, pos+1, high); /*对右部子表快速排序*/
         
    }
}
搜索更多相关主题的帖子: include create 如何 信息 用户 
2016-12-26 12:27
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:20 
我只会冒泡排序,插入排序和快速排序看看有没有人回,顺便学习一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-26 12:35
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
稍微提一下:case 2:InsertSort(int a[],int length);break;/*直接插入排序法*/ 这里应该是调用实参,而不是再次声明,下面几个也是~可以先声明一个数组,然后再传入该数组地址~

觉得插入排序用链表实现效率较高~

[此贴子已经被作者于2016-12-26 13:30编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-26 13:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472930-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.350292 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved