插入排序和归并排序
//插入排序
//C++
#include <iostream>
using namespace std;
void main()
{
int a[6]={5,2,4,6,1,3};//定义一个未排好序的数组
int i,j,key;
for(i=0;i<6;i++)//输出排序前的序列
printf("%3d",a[i]);
for(j=1;j<6;j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]>key)
{
a[i+1]=a[i];
i=i-1;
}
a[i+1]=key;
}
cout<<endl;
for(i=0;i<6;i++)//输出排序后的序列
printf("%3d",a[i]);
cout<<endl;
}
//归并排序
//C++代码
#include <iostream>
using namespace std;
void mergearray(int a[],int first,int mid,int last,int temp[])// 将两个序列合成一个序列
{
int i,j,k,m,n;
i=first; j=mid+1;
m=mid; n=last;
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);
}
}
void Mergesort(int a[],int n)//调用归并函数
{
int *p=new int[n];
mergesort(a,0,n-1,p);
delete[] p;
}
void main()
{
int i;
int a[6]={6,5,4,3,2,1};
for(i=0;i<6;i++)//输出初始数列
cout<<a[i]<<" ";
cout<<endl;
Mergesort(a,6);
for(i=0;i<6;i++)//输出排序后序列
cout<<a[i]<<" ";
cout<<endl;
}
注释:归并排序算法是优于插入排序的算法,当排序的数据越多它的优势越明显。掌握一种更加高级的数据算法对于一个好的程序员来说非常重要。
相关文章
- 归并排序
- 面试高频题:归并排序详解
- 【说站】python归并排序如何理解
- 拓扑排序Golang实现
- 83. 删除排序链表中的重复元素
- 使用归并排序来计算逆序数
- 基础算法篇——归并排序
- c-归并排序
- 归并排序应用——剑指 Offer 51. 数组中的逆序对
- 七日算法先导(五)——归并排序,希尔排序
- 复杂排序---归并排序
- 基于C++的归并排序、快速排序、希尔排序对比测试
- 排序7:归并排序
- 归并排序以及求数组小和的问题
- MySQL排序检索数据操作方法梳理
- 使用Oracle排序:升序与降序(oracle升序降序)
- C语言归并排序算法
- HTML 标签列表(功能排序)
- Oracle中文排序的规则与技巧(oracle中文排序规则)
- Oracle三种排序函数实现快速排序(oracle三种排序函数)
- 快速排序php与javascript的不同之处
- 归并排序的实现代码与思路
- 归并排序的递归实现与非递归实现代码
- Javascript排序算法之合并排序(归并排序)的2个例子
- PHP与MYSQL中UTF8编码的中文排序实例
- Android中实现HashMap排序的方法