排序算法的完整代码
用户选择数据规模分为三种10、1000、10000.选择后随机生成相关规模的数据保存在文件data_wait.txt中,每随机生成一组数据,就会覆盖前一组随机数据,便于读取排序,然后调用排序算法函数进行排序,将已排序数据序列保存于文件data_ordlely.txt中,该文件中保存多次执行结果。
该代码还有许多可修改完善之处,仅供读者参考。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MaxScale 10001
int choice_Scale; //数据规模
void InsertSort(int num[], int n) {
//直接插入排序,从小到大 ,下标1开始有效
int i,j;
for(i = 2; i <= n; i++) {
if(num[i] < num[i-1]) {
num[0] = num[i];
for(j = i-1; num[j] > num[0]; j--) {
num[j+1] = num[j];
}
}
}
}
void ShellSort(int num[], int n) {
//希尔排序,增量选择为2的k次方减1,从小到大,起始下标1
int k, s,d,i,j;
for(k = log(n)/log(2); k >= 1; k--) {
d = pow(2,k)-1;
// printf("\nd = %5d,k = %d\n",d,k);
for(s = 1; s <= d; s++) {
for(i = s+d; i <= n; i+=d) {
if(num[i] < num[i-d]) {
num[0] = num[i];
for(j = i-d; j > 0 && num[j] > num[0]; j-=d) {
num[j+d] = num[j];
}
num[j+d] = num[0];
}
}
}
}
}
void BubbleSort(int num[], int n) {
//冒泡排序,从小到大,起始下标1
int i,j, t , f = 1;
for(i = 1; i <= n; i++) {
for(j = 1; j < n-i; j ++) {
if(num[j] >num[j+1]) {
t = num[j];
num[j] = num[j+1];
num[j+1] = t;
f = 0;
}
}
if(f) {
break;
}
}
}
//移动low、high进行记录交换
int AdjustAarry(int num[], int low