更多資料請點擊:我的目錄
本篇僅用於記錄自己所學知識及應用,代碼仍可優化,僅供參考,如果發現有錯誤的地方,儘管留言於我,謝謝。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define N 1000000
void shell(int len , int data[]);//希爾排序
int main()
{
FILE *src = fopen("numbers.txt","r");//已有數據文本文檔
FILE *dst = fopen("sort_num.txt","w+");//空文本文檔
int temp[N] = {0};
int n = 0;
for(int i = 0; i < N; i++)
{
fscanf(src , "%d", &temp[i]);//將文本文檔數據寫入數組中
n++;
}
fclose(src);
printf("讀取完畢!讀取次數 %d次。\n",n);
shell(N,temp);//希爾排序
for(int i = 0; i < N; i++)
{
//printf("data[%d] ==%d \n",i ,temp[i]);//排序後數據輸出
fprintf(dst ,"%d\n", temp[i]);//將排序後數據寫入新的文本文檔
}
fclose(dst);
return 0;
}
void insert_sort(int data[], int len, int space)//希爾排序
{
if(len <= 1)
return;
for(int i = space; i < len*space; i += space)
{
int j, tmp = data[i];
for(j = i-space; j >= 0; j -= space)
{
if(data[j] < tmp)
break;
data[j+space] = data[j];
}
data[j+space] = tmp;
}
}
void shell(int len , int data[])//希爾排序
{
printf("\n正在排序...\n");
if(len <= 1)
return;
for(int space = len/2; space > 0; space /= 2)
{
for(int i = 0; i < space; ++i)
{
insert_sort(data+i, len/space, space);//遞歸循環
}
}
}
更多資料請點擊:我的目錄