/*************************************************************************
* 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;
}
数据结构上机题目1--基本排序
最新推荐文章于 2021-09-22 06:44:39 发布