数据结构上机题目1--基本排序

/*************************************************************************
* author:crazy_石头
* algorithm:bubble_sort
* date:2013/09/29
* 程序功能:随机产生1000个整数存入bubble_sort.txt,然后从文件中读到数组里面进行冒泡排序。
**************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <time.h>
#include <algorithm>
using namespace std;

#define A system("pause")
#define N 100005
#define M 400010
#define INF INT_MAX
const int maxn=1000;

inline void bubble_sort(int *a)
{
    for(int i=0;i<maxn;i++)
    {
        for(int j=0;j<maxn-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                int tmp=a[j+1];
                a[j+1]=a[j];
                a[j]=tmp;
            }
        }
    }
}

inline void select_sort(int *a)
{
    for(int i=0;i<maxn;i++)//选出第i小的记录;在从i~n中选择最小的记录,与第i个交换;
    {
        int k=i;
        for(int j=i+1;j<=maxn;j++)
        {
            if(a[j]<a[k])
            {
                k=j;//依次可以每次找到最小数所在位置;
            }
        }
        if(k!=i)
            swap(a[k],a[i]);//与第i个位置交换,O(n*n)复杂度;
    }
}

inline void insert_sort(int *a)
{//模拟于打扑克牌时接牌的过程;
    for(int i=1;i<maxn;i++)//a[0]肯定是有序的,故从第二个元素开始进行即可;
    {
        int temp=a[i];//temp为第一个未排序元素;
        int j=i-1;
        while(j>=0&&a[j]>temp)//将temp与已排序元素进行比较,寻找其该插入的位置;
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=temp;
    }
}

inline void QuickSort(int l,int r,int b[])
{
    int i,j,x;
    if(l>=r)return ;
    i=l;
    j=r;
    x=b[i];
    while(i!=j)
    {
        while(b[j]>x&&j>i)
            j--;
        if(i<j)
        {
            b[i]=b[j];
            i++;
        }
        while(b[i]<x&&j>i)
            i++;
        if(i<j)
        {
                b[j]=b[i];
                j--;
        }
    }
    b[i]=x;
    QuickSort(l,j-1,b);
    QuickSort(i+1,r,b);
}

int main()
{
    int a[maxn];
    srand(time(0));//设置当前时间种子;

    FILE *fp;
    fp=fopen("bubble_sort.txt","w");//以只写方式打开;
    if(fp==NULL)
    {
        cout<<"ERROR!"<<endl;
    }
    printf("产生的随机数如下:\n");//生成随机数;
    for(int i=0;i<maxn;i++)
    {

//        if(i%5==0&&i!=0)
//        {
//            cout<<endl;
//        }

        int num=rand()%100+1;
        cout<<num<<" ";//产生随机数;
        fprintf(fp,"%d ",num);//写入整数时必须加空格,不然会粘在一块变成很大的数溢出了,将该数输入到文件中;
    }
    cout<<endl;
    fclose(fp);

    fp=fopen("bubble_sort.txt","r");

    if(fp==NULL)
    {
        cout<<"ERROR!"<<endl;
    }
    for(int i=0;i<maxn;i++)
    {
        fscanf(fp,"%d",&a[i]);//从文件中读入数组a;
    }
    //for(int i=0;i<15;i++)
//    cout<<a[i]<<endl;
//    printf("冒泡排序结果如下:\n");
//    bubble_sort(a);//进行冒泡排序的操作;
//    for(int i=0;i<maxn;i++)
//    i?printf("%5d",a[i]):printf("%d",a[i]);
//    cout<<endl<<"Time_Used="<<(double)clock()/CLOCKS_PER_SEC<<"s"<<endl;
//
//    printf("选择排序结果如下:\n");
//    select_sort(a);//进行选择排序操作;
//    for(int i=0;i<maxn;i++)
//    i?printf("%5d",a[i]):printf("%d",a[i]);
//    cout<<endl<<"Time_Used="<<(double)clock()/CLOCKS_PER_SEC<<"s"<<endl;
//
    printf("直接插入排序结果如下:\n");
    insert_sort(a);//进行直接插入排序;
    for(int i=0;i<maxn;i++)
    i?printf("%5d",a[i]):printf("%d",a[i]);
    cout<<endl<<"Time_Used="<<(double)clock()/CLOCKS_PER_SEC<<"s"<<endl;

//    printf("快速排序结果如下:\n");
//    QuickSort(0,999,a);//快速排序操作;
//    for(int i=0;i<maxn;i++)
//    i?printf("%5d",a[i]):printf("%d",a[i]);
//    cout<<endl<<"Time_Used="<<(double)clock()/CLOCKS_PER_SEC<<"s"<<endl;

    cout<<endl;
    fclose(fp);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值