void Merger_Sort(int A[], int s, int t);
//r[]为待排序的数组,r1[]用来存放排好序的数组
void Merger(int A[],int B[], int s, int m, int t);
#include"stdafx.h"
#include "Sort.h"
//A[0...n-1],一共N个数字。
void Insert_Sort(int A[], int n)
{
for ( int i = 1; i < n; i++)
{
int iKey = A[i];
int j = i - 1;
bool bChange = false;
while ( iKey < A[j] && j >= 0)
{
A[j + 1] = A[j];
j--;
bChange = true;
}
if (bChange)
{
A[j+1] = iKey;
}
}
}
void Merger_Sort(int A[], int s, int t)
{
if ( s < t)
{
const int iCount = t - s + 1; //总元素个数
int m = (s + t)/2; //中间值
Merger_Sort(A, s, m); //递归排序前半部
Merger_Sort(A, m+ 1, t); //递归排序后半部
int* B = new int[iCount];
Merger(A,B, s, m, t);
for ( int i = s ; i <= t; i++)
{
A[i] = B[i-s];
}
}
}
void Merger(int A[],int B[], int s, int m, int t)
{
int i = s;
int j = m + 1;
int k = 0;
while( i <= m && j <= t)
{
if(A[i] < A[j])
{
B[k++] = A[i++];
}
else
{
B[k++]= A[j++];
}
}
while(i <= m)
{
B[k++]= A[i++];
}
while(j <= t)
{
B[k++]= A[j++];
}
}
#include "stdafx.h"
#include "Sort.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int A[10];
for ( int i = 0; i < 10; i ++)
{
A[i] = (int)rand()%20;
cout << A[i] << ", ";
}
cout << endl;
Insert_Sort(A,10);
for ( int i = 0; i < 10; i ++)
{
cout << A[i] << ", ";
}
cout << endl;
int B[109];
for (int i = 0; i < 100; i++)
{
B[i] = (int)rand()%100;
cout << B[i] << ", ";
}
cout << endl;
Merger_Sort(B,0, 99);
for ( int i = 0; i < 100; i ++)
{
cout << B[i] << ", ";
}
cout << endl;
return 0;
}