您的位置:首页 > 其它

对N个随机数的插入排序和合并排序

2015-05-16 19:32 274 查看
#include <iostream>
#include <time.h>
#include <math.h>
#include <climits>	// INT_MAX
using namespace std;

const int LENGTH = 10000;

void print_array(int A[LENGTH]);
void insertion_sort(int A[LENGTH]);
void permutate(int A[LENGTH]);
void merge(int A[], int p, int q, int r);
void merge_sort(int A[], int p, int r);

int main()
{
int A[LENGTH];
permutate(A);
print_array(A);
int TimeBegin = clock();
// insertion_sort(A);	//插入排序
merge_sort(A, 1, LENGTH);	// 合并排序
int TimeEnd = clock();
print_array(A);
cout << "Time cost: " << TimeEnd - TimeBegin << "ms" << endl;
getchar();
return 0;
}

void print_array(int A[LENGTH])
{
int i;
for(i = 0; i < LENGTH; i++)
{
cout << A[i] << " ";
}
cout << endl;
}

// 插入排序
void insertion_sort(int A[LENGTH])
{
int i, j, key;
for(j = 1; j < LENGTH; j++)
{
key = A[j];
i = j - 1;
while((!(i < 0)) && A[i] > key)
{
A[i+1] = A[i];
i--;
A[i+1] = key;
}
}
}

// 生成1-LENGTH随机数组
void permutate(int A[LENGTH])
{
int j, k;
srand((unsigned)time(NULL));
for(j = 0; j < LENGTH; j++)
{
A[j] = 1 + rand()%(LENGTH);
for(k = 0; k < j; k++)
{
if(A[j] == A[k])
{
j--;
break;
}
}
}
}

// 合并排序
void merge(int A[], int p, int q, int r)
{
int n1, n2;
int i, j, k;
n1 = q - p + 1;
n2 = r - q;
int *L = new int[n1+1];
int *R = new int[n2+1];
for(i = 0; i < n1; i++)
L[i] = A[p + i - 1];
for(j = 0; j < n2; j++)
R[j] = A[q + j];
L[n1] = INT_MAX;
R[n2] = INT_MAX;
i = 0;
j = 0;
for(k = p-1; k < r; k++)
{
if(L[i] <= R[j])
{
A[k] = L[i];
i++;
}
else
{
A[k] = R[j];
j++;
}
}
delete[] L;
delete[] R;
}

void merge_sort(int A[], int p, int r)
{
double qDbl;
int q;
if(p < r)
{
qDbl = floor((double)(p+r)/2);
q = (int)qDbl;
merge_sort(A, p, q);
merge_sort(A, q+1, r);
merge(A, p, q, r);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息