数据结构-排序

//排序
//程序:张建波
//时间:05/07/10 Am 2:50
#include <iostream.h>
#include <stdlib.h>
#include "menu.h"
#include "key.h"

int RandomNum(int *RandArray,int N);  //随机生成数据
void OutPutNum(int *p,int N);  //输出测试数据
void BubbleSort(int *p,int N,int SortType);   //冒泡排序
void InsertSort(int *p,int N,int SortType); //插入排序

int _CreatRandData(int *RandArray);  //输入随机数范围
int _InputData(int *RandArray); //输入自定义数据
void _TestBubbleSort(int *RandArray,int n);  //冒泡排序 测试程序
void _TestInsertSort(int *RandArray,int n);  //插入排序 测试程序


int _f8_main(){

    int n=0,t=1,ID;
    int RandArray[1024*5];  //储存测试数据
      Menu m[7];
    m[1].Name="生成随机数据";
    m[2].Name="输入测试数据";
    m[3].Name="冒泡排序";
    m[4].Name="插入排序";
    m[5].Name="查看数据";
    m[6].Name="返回    ";
    while(t)
    {
        ShowMenu("数据结构----数据排序",m,6);//显示菜单
        ID=SelectMenuID();
        switch(ID)
        {
        case 1:{n=_CreatRandData(RandArray);break;}
        case 2:{n=_InputData(RandArray);break;}
        case 3:{_TestBubbleSort(RandArray,n);break;}
        case 4:{_TestInsertSort(RandArray,n);break;}
        case 5:{OutPutNum(RandArray,n);InitKey();break;}
        case 6:{return 0;}
        }
    }

   
    return 0;
}

int RandomNum(int *RandArray,int N){  //随机生成数据
 for(int i=0; i<N; i++) RandArray[i]=(int)rand();
 return N;
}

void OutPutNum(int *p,int N){  //输出测试数据
    for(int i=0;i<N;i++){
        if(i%10==0)cout<<"/n";
        cout<<p[i]<<" ";
    }
}

void BubbleSort(int *p,int N,int SortType){   //冒泡排序
    //SortType=0 表示从大到小排序 SortType=1 从小到大排序
    int tmp;
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
            if(p[i]<p[j] && SortType==0){
                tmp=p[i];
                p[i]=p[j];
                p[j]=tmp;
            }
            else if(p[i]>p[j] && SortType==1){
                tmp=p[i];
                p[i]=p[j];
                p[j]=tmp;
            }
           
        }
}

void InsertSort(int *A,int N,int SortType){ //插入排序
    //SortType=0 表示从小到大排序 SortType=1 从大到小排序

    int j,p;
    int Tmp;
    for(p=1;p<N;p++)
    {
        Tmp=A[p];
        if(SortType==0)for(j=p;j>0 && A[j-1]>Tmp;j--)A[j]=A[j-1];

        if(SortType==1)for(j=p;j>0 && A[j-1]<Tmp;j--)A[j]=A[j-1];

        A[j]=Tmp;
    }


}


int _CreatRandData(int *RandArray){  //输入随机数范围
    int n;
Loop_1:
            cout<<"请输入数据个数(0<n<=5000)/nn=";
            cin>>n;
            if(n<=0 || n>5000){cout<<"数据超出范围:!!!/n";goto Loop_1;}
            n=RandomNum(RandArray,n);InitKey();
            return n;

}


int _InputData(int *RandArray){ //输入自定义数据
        int mt,n;
Loop_2:
            cout<<"请输入数据个数(0<n<=5000)/nn=";
            cin>>n;
            if(n<=0 || n>5000){cout<<"数据超出范围:!!!/n";goto Loop_2;}
            for(int j=0;j<n;j++)
            {
                cout<<"请输入第"<<j+1<<"个数据/nm=";
                cin>>mt;
                RandArray[j]=mt;
            }
            return n;
}

void _TestBubbleSort(int *RandArray,int n){  //冒泡排序 测试程序
            cout<<"采用冒泡排序/n";
            cout<<"/n从小到大/n";
            BubbleSort(RandArray,n,0);  //从小到大
            OutPutNum(RandArray,n);     //输出排序后的结果
            cout<<"/n从从大到小/n";
            BubbleSort(RandArray,n,1);  //从大到小
            OutPutNum(RandArray,n);     //输出排序后的结果
            InitKey();
}

void _TestInsertSort(int *RandArray,int n){  //插入排序 测试程序

    cout<<"采用插入排序/n";
    cout<<"/n从小到大/n";
    InsertSort(RandArray,n,0);  //从小到大
    OutPutNum(RandArray,n);     //输出排序后的结果
    cout<<"/n从从大到小/n";
    InsertSort(RandArray,n,1);  //从大到小
    OutPutNum(RandArray,n);     //输出排序后的结果
    InitKey();


}

posted @ 2006-02-09 16:20  陕北蜂农  阅读(168)  评论(0编辑  收藏  举报