数据结构实验十 排序算法
来源:互联网 发布:淘宝推广客的角色 编辑:程序博客网 时间: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
- 数据结构实验十 排序算法
- 数据结构与算法·实验十
- (十)数据结构之希尔排序算法实现
- 数据结构与算法实验题 5.2 排序
- 数据结构实验--------主要排序算法的实现
- 回顾大学--大二数据结构实验--实验二 排序算法
- 实验十 内部排序
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 数据结构实验4(排序算法的实现及性能分析)
- 《数据结构实验5》--排序
- 数据结构实验六排序
- 【数据结构实验八】排序
- 十大排序算法
- 十大排序算法
- 十大排序算法
- 十种排序算法
- 十大排序算法
- 十大排序算法
- 深入探讨 Java 类加载器
- Uncaught Error: datetimepicker component should be placed within a relative positioned container
- 这些年留在身边一直不舍得舍弃的
- VS给自己开发的QT程序加上程序图标icon
- Android 6.0 源码分析
- 数据结构实验十 排序算法
- Android性能优化之路(二)
- 微信公众号测试号申请和配置一点通
- android 开机启动广播 BOOT_COMPLETED
- sinatra
- Web系统大规模并发——电商秒杀与抢购
- 检查是否有人在你的电脑插入USB相关设备
- 2016年11月
- StringUtils方法全集