算法学习与实践之希尔排序

来源:互联网 发布:c语言英语单词 编辑:程序博客网 时间:2024/04/30 14:40
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>#include <string.h>int n;int *a;char srcfile[32] = "src.txt";char dstfile[32] = "dst.txt";int input(void){FILE *fp;fp = fopen(srcfile, "r");fscanf(fp, "%d\n", &n);a = (int *)malloc(n * sizeof(int));for(int i = 0; i < n; i++) {fscanf(fp, "%d ", &a[i]);//printf("%d ", a[i]);}//printf("\n");return 0;}int src(void){FILE *fp;char str[32];//printf("src:\n");fp = fopen(srcfile, "w+");sprintf(str, "%d\n", n);fputs(str, fp);srand((unsigned int)time(NULL));for(int i = 0; i < n; i++) {a[i] = rand() % 1000000;//printf("%d ", a[i]);sprintf(str, "%d ", a[i]);fputs(str, fp);//fwrite(str, strlen(str), 0, fp);}//printf("\n");fclose(fp);return 0;}int dst(void){FILE *fp;char str[32];fp = fopen(dstfile, "w+");sprintf(str, "%d\n", n);fputs(str, fp);//printf("dst:\n");for(int i = 0; i < n; i++) {//printf("%d ", a[i]);sprintf(str, "%d ", a[i]);fputs(str, fp);}//printf("\n");fclose(fp);return 0;}void MergeSort(int A[], int N){int i, j, inc;int tmp;int k;inc = N / 2;while(inc > 0) {for(i = inc; i < N; i++) {tmp = A[i];for(j = i - inc; j >= 0; j -= inc) {if(A[j] > tmp)A[j + inc] = A[j];elsebreak;}A[j + inc] = tmp;}inc /= 2;//for(k = 0; k < N; k++)//printf("%d ", A[k]);//printf("\n");}}void sort(int A[], int N){MergeSort(A, N);}int main(int argc, char **argv){n = 1000000;a = (int *)malloc(n * sizeof(int));src();//strcpy(srcfile, argv[1]);//strcpy(dstfile, argv[2]);//input();sort(a, n);dst();free(a);return 0;}

原创粉丝点击