归并排序方法
2015-09-17 20:10
274 查看
#include <iostream>
using namespace std;
void mergearray(int a[], int first, int mid, int last, int temp[])
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{
if (first < last)
{
int mid = (first + last) / 2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
mergearray(a, first, mid, last, temp); //再将二个有序数列合并
}
}
bool MergeSort(int a[], int n)
{
int *p = new int
;
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
delete[] p;
return true;
}
int main()
{
int a[10] = { 3, 2, 1, 4, 5, 7, 6, 9, 8, 10 };
MergeSort(a, 10);
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
}
using namespace std;
void mergearray(int a[], int first, int mid, int last, int temp[])
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{
if (first < last)
{
int mid = (first + last) / 2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
mergearray(a, first, mid, last, temp); //再将二个有序数列合并
}
}
bool MergeSort(int a[], int n)
{
int *p = new int
;
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
delete[] p;
return true;
}
int main()
{
int a[10] = { 3, 2, 1, 4, 5, 7, 6, 9, 8, 10 };
MergeSort(a, 10);
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
}
相关文章推荐
- Oracle 触发器数据同步
- AngularJS进阶(六)AngularJS+BootStrap实现弹出对话框
- Android MediaPlayer 播放本地与远程的mp3初步
- 单例懒汉式的多线程操作的安全问题
- shell脚本 集成测试多个UiAutomator case类
- AngularJS进阶(六)AngularJS+BootStrap实现弹出对话框
- css问题
- Linux中select poll和epoll的区别
- 正规子群
- 自定义listview出现android.view.InflateException:Binary xml file line#
- HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(博弈)
- hdu5137How Many Maos Does the Guanxi Worth
- eclipse 如何修改jsp的编码方式?
- POJ1142 暴力质因数分解+素数测试
- 第3周项目4- 顺序表应用(1)
- input怎么限制用户输入一些字符
- 自定义View之Bitmap/在Bitmap上绘制新的图形/Xfermode属性
- HDU 2011 多项式求和
- Linux/UNIX先进I/O
- 2015 ACM/ICPC Asia Regional Changchun Online(1008)