#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
#define MAXSIZE 10
const int n = MAXSIZE;
int num[n];
void init()
{
for (int i = 0; i < n; i++) num[i] = rand() % 100;//产生MAXSIZE(10)个数据 数据范围为0~~~99;
}
void output()
{
for (int i = 0; i < n; i++)
{
printf("%d ", num[i]);
//if (i % 10 == 9) printf("\n");
}
printf("\n");
}
;
///归并排序(迭代) order by asc
void merge(int num[], int l, int m, int n, int extra[])
{//将为l....m和 m+1.....n 的两个序列 归并为一个有序序列
int j, k, i;
j = l;
k = m + 1;
i = j;
while (j <= m && k <= n)
{
if (num[j] < num[k]) extra[i++] = num[j++];
else extra[i++] = num[k++];
}
while (j <= m) extra[i++] = num[j++];
while (k <= n) extra[i++] = num[k++];
for (i = l; i <= n; i++)
{
num[i] = extra[i];
}
}
void merge_pass(int num[],int n,int extra[],int lengh)
{
int i, j;
for (i = 0; i < n - 2 * lengh; i += 2 * lengh) merge(num, i, i + lengh - 1, i + 2 * lengh-1, extra);
if (i + lengh < n) merge(num, i, i + lengh - 1, n - 1, extra);
}
void merge_sort(int num[],int n)
{
int lengh = 1;
int extra[MAXSIZE];
while (lengh < n)
{
merge_pass(num, n, extra, lengh);
lengh *= 2;
}
}
void check()
{
int flag=1;
for (int i = 0; i < n - 1; i++)
{
if (num[i] < num[i + 1]) continue;
else { flag = 0; break; }
}
if (flag) printf("correct sort\n");
else printf("something wrong!\n");
}
int main()
{
srand((unsigned)time(NULL));
init();
output();
//
printf("迭代排序:\n");
merge_sort(num, n);
;
/
output();
check();
return 0;
}
33. 归并排序(迭代)
最新推荐文章于 2021-09-09 14:41:08 发布