//
// main.cpp
// Sorting
//
// Created by yanzhengqing on 12-12-6.
// Copyright (c) 2012年 yanzhengqing. All rights reserved.
#include <iostream>
using namespace std;
int input_array(intconst *p)
{
printf("please input the array numbers......\n");
for (uint i =0; i <10;i++)
{
scanf("%d",p++);
}
return0;
}
int output_array(intconst *p)
{
for (uint i =0; i <10;i++)
{
printf("%d\t",*(p++) );
}
return0;
}
/**********************************************************************************************/
//二路归并排序
int Merge(int *r,int temp[],int s,int m,int t)
{
int i = s;
int j = m+1;
int k =s;
while ((i<=m) && (j<=t)) //保证两个序列比较中一个序列的排序完全结束
{
if (r[i] <= r[j])
{
temp[k++] = r[i++];
}
else
{
temp[k++] = r[j++];
}
}
if(i<=m) //赋值剩下的序列
{
while(i<=m)
{
temp[k++]=r[i++];
}
}
else
{
while (j<=t)
{
temp[k++]=r[j++];
}
}
for (int l = s;l<=t;l++) //将辅助数组的值赋值给原始数组
{
r[l] = temp[l];
}
return0;
}
//21 9 43 22 56 87 65 49 76 10
int merging_sort(int *r,int temp[],int s,int t)
{
if(s==t)
return0;
else
{
int m = (s+t)/2;
merging_sort(r,temp,s,m);
merging_sort(r,temp,m+1,t);
Merge(r,temp,s,m,t);
}
return0;
}
int main(int argc,constchar * argv[])
{
int array[10] = {0};
int temp[10] = {0}; //辅助数组
input_array(array);
merging_sort(array,temp,0,((sizeof(array)/sizeof(int))-1));
//merging_sort(array,array,0,((sizeof(array)/sizeof(int))-1));
//我原来想利用函数的特性直接对array数组拷贝一份temp,后来发现自己错了。数组间的传递是指针间的赋值,也就是指针指向同样一块存储区。所以调试的时候发现问题,赋值的时候
//老是出现元素被更改。后来仔细想想问题应该出现在这个位置,前面的数组赋值问题提到这个疑惑,但又犯了同样错误。不可原谅。。。。。呵呵呵
output_array(array);
return0;
}
/***********************************************************************************************************
实例:
please input the array numbers......
21
9
43
56
87
65
49
76
10
22
9 10 212243 49 56 657687