数据结构实验十 排序算法

来源:互联网 发布:淘宝推广客的角色 编辑:程序博客网 时间:2024/04/28 03:39

头文件

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define MAX 500000/*从文件中读入数据存入数组a*/int readData(int a[], int n,char *f)/*函数返回成功读入的数据个数*/{    FILE *fp;    fp=fopen(f,"r");    if(fp==NULL)        return 0;    else    {        for(int i=1;i<=n&&!feof(fp);i++)            fscanf(fp,"%d",&a[i]);        fclose(fp);        return i-1;    }}/*存盘函数*/void saveData(int a[],int n, char *f){    FILE *fp;    fp=fopen(f,"w");    if(fp==NULL)        printf("文件建立失败!");    else    {        for(int i=1;i<=n;i++){            fprintf(fp,"%7d",a[i]);            if(i%10==0)                fprintf(fp,"%c",'\n');        }        fclose(fp);    }}void output(int a[],int n){    printf("\n数组的内容是:\n");    for(int i=1;i<=n;i++){        printf("%7d",a[i]);        if(i%10==0)            puts("");    }    puts("");}


一般性插入算法

/*直接插入排序算法进行升序排序*/#include"Arrayio.h"#define N 10int a[N+10],n;void insertSort(){    for(int i=2;i<=n;i++){        int temp=a[i],j=i-1;        for(;j>=1&&temp<a[j];j--)            a[j+1]=a[j];        a[++j]=temp;    }}int  main(){  printf("数据初始化...\n");  n=readData(a,N,"data1.txt");  printf("%d个数据排序中...\n",n);  insertSort();  saveData(a,n,"out.txt");  printf("排序结束,排序结果保存在out.txt文件中。\n");  return 0;}


二分插入算法


/*二分插入排序算法进行升序排序*/#include"Arrayio.h"#define N 10int a[N+1],n;void binInsertSort(){    int right,left,mid;    for(int i=2;i<=n;i++){        right=i,left=1;        mid=(right+left)>>1;        while(left<right)        {            if(a[mid]>a[i])                right=mid;            else                left=mid+1;            mid=(right+left)>>1;        }        int temp=a[i];        for(int j=i-1;j>=mid;j--)            a[j+1]=a[j];        a[mid]=temp;    }}int  main(){  printf("数据初始化...\n");  n=readData(a,N,"data1.txt");  printf("%d个数据排序中...\n",n);  binInsertSort();  saveData(a,n,"out.txt");  printf("排序结束,排序结果保存在out.txt文件中。\n");  return 0;}


shell排序

/*shell升序排序*/#include"Arrayio.h"#define N 10int a[N+1],n;void shell_Insert(int d){    for(int i=d+1;i<=n;i++){        int temp=a[i],j=i-d;        for(;j>0&&temp<a[j];j-=d)            a[j+d]=a[j];        a[j+d]=temp;    }}void shellSort(){    int last=n/2;    while(last!=1)    {        shell_Insert(last);        last/=2;    }}int  main(){  printf("数据初始化...\n");  n=readData(a,N,"data1.txt");  printf("%d个数据排序中...\n",n);  shellSort();  saveData(a,n,"out.txt");  printf("排序结束,排序结果保存在out.txt文件中。\n");  return 0;}


选择排序

/*选择排序算法进行升序排序*/#include"Arrayio.h"#define N 10int a[N+1],n;void selectSort(){    for(int i=1;i<n;i++){        int temp=a[i],pos=i;        for(int j=i+1;j<=n;j++)            if(temp>a[j])                temp=a[j],pos=j;        swap(a[i],a[pos]);    }}int  main(){    printf("数据初始化...\n");    n=readData(a,N,"data1.txt");    printf("%d个数据排序中...\n",n);    selectSort();    saveData(a,n,"out.txt");    printf("排序结束,排序结果保存在out.txt文件中。\n");    return 0;}



堆排序

/*堆排序*/#include"Arrayio.h"#define N 10#define father(i) (i>>1)#define left(i) (i<<1)#define right(i) (i<<1|1)#define swap(a,b) {int t=a;a=b;b=t;}int heap_size;int a[N+1];void max_heapify(int i){    int l=left(i);    int r=right(i);    int largest;    if(l<=heap_size&&a[l]>a[i])        largest=l;    else        largest=i;    if(r<=heap_size&&a[r]>a[largest])        largest=r;    if(largest!=i)    {        swap(a[i],a[largest]);        max_heapify(largest);    }}void build_max_heap(){    for(int i=heap_size/2; i>=1; i--)        max_heapify(i);}void heap_sort(){    for(int i=heap_size; i>=2; i--)    {        swap(a[1],a[i]);        heap_size--;        max_heapify(1);    }}int  main(){    int n;    printf("数据初始化...\n");    n=readData(a,N,"data1.txt");    printf("%d个数据排序中...\n",n);    heap_size=n;    build_max_heap();    heap_sort();    saveData(a,n,"out.txt");    printf("排序结束,排序结果保存在out.txt文件中。\n");    return 0;}



冒泡排序

/*冒泡排序进行升序排序*/#include "Arrayio.h"#define N 10int a[N+1],n;void bubbleSort(){    for(int i=1;i<n;i++)        for(int j=i+1;j<=n;j++)            if(a[j-1]>a[j])                swap(a[j-1],a[j]);}int  main(){    printf("数据初始化...\n");    n=readData(a,N,"data1.txt");    printf("%d个数据排序中...\n",n);    bubbleSort();    saveData(a,n,"out.txt");    printf("排序结束,排序结果保存在out.txt文件中。\n");    return 0;}




0 0
原创粉丝点击