归并排序算法
来源:互联网 发布:js作用域链面试题 编辑:程序博客网 时间:2024/06/05 21:43
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
//合并两段已经排好序的列表
void merge(int list[] ,int mergelist[] , int left , int mid , int right)
{
int i = left;
int j = mid + 1;
int k = left;
while( i <= mid && j <= right)
{
//从左往右按顺序检查两个子列表,将最小的存放到mergelist
if (list[i] < list[j])
{
mergelist[k++] = list[i++];
}
else
{
mergelist[k++] = list[j++];
}
}
if (i<=mid)
{
//如果右边子列表已存放完毕,则继续将左边剩下的数据存放到mergelist
for(; i <= mid; i++)
mergelist[k++] = list[i];
}
else
{
//如果左边子列表已存放完毕,则继续将右边边剩下的数据存放到mergelist
for (; j <= right; j++)
{
mergelist[k++] = list[j];
}
}
}
//将列表list按照seglen分段排序,并将结果存放到mergelist
void MergePass(int list[] , int mergelist[] , const int size, const int seglen)
{
int i = 0;
while( i + 2*seglen <= size)
{
//当两段都达到seglen长度时,调用merge
merge(list,mergelist, i, i+seglen -1, i + 2*seglen -1);
i += 2*seglen;
}
if (i + seglen <= size - 1)
{
//一长一短
merge(list,mergelist, i, i+seglen -1, size - 1);
}
else
{
for ( ; i <= size -1 ; i++)
{
mergelist[i] = list[i];
}
}
}
#define MAX_SIZE 1000
void MergeSort(int list[], int size)
{
int seglen = 1;
int tmplist[MAX_SIZE];
while(seglen < size)
{
MergePass(list,tmplist,size,seglen);
seglen *= 2;
if (seglen >= size)
{
for ( int i = 0; i< size ; i++)
{
list[i] = tmplist[i];
}
}
else
{
MergePass(tmplist,list,size,seglen);
seglen *= 2;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
srand( (unsigned)time( NULL ) );
const int size = 8;
int array[size];
printf("rand number:/n");
for ( int i = 0; i < size ; i++)
{
array[i] = rand()%1000;
printf("%d ", array[i]);
}
printf("/nafter merge sort:/n");
MergeSort(array,size);
for ( int i = 0; i < size ; i++)
{
printf("%d ", array[i]);
}
printf("/n");
return 0;
}
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 1.flex工程报错出现每次打开窗口的时候都会弹出一个窗口提示错误,提示“a problem has occurred when opening project "your project name",try to restart the applicat
- head refresh 网络协议:RFC2961 - RSVP Refresh Overhead Reduction Extensions
- 【转】V$SQL
- [JQUERY] 宏观欣赏
- struts Logic标签
- 归并排序算法
- ExtJs2.0学习系列(14)--Ext.TreePanel之第三式(可增删改的树)
- 如何使用CBO,CBO与RULE的区别?
- FTP 的主動模式( active )和被動模式( passive )
- JSP中文乱码解决方案-Tomcat5.0版
- DOTNET开发过程中加入静态的文件碎片
- C# 清理 Cookies 文件
- sql server 2000 常见错误,系统126错误!
- REST学习和应用总结