您的位置:首页 > 理论基础 > 数据结构算法

数据结构几类排序的总结和完整代码 待续。。

2014-09-16 09:16 295 查看
一 插入排序

简单插入排序

希尔排序

二 快速排序

快排是冒泡排序的改进,每做一次排序可以确定一个数最终的位置p,同时把所有小于这个数的放在它左边,小于这个数的放在它后面。再递归地进行p左边部分和p右边部分的排序就可以了。

代码:

#include<iostream>
#include<cstdio>
using namespace std;

int a[100002],count1=0,n;
int b[100002];

void Merge(int s,int t,int m)
{
int i,k,j;
for(int i=s;i<=t;i++)
b[i]=a[i];        //把s...t段的a  拷贝给b
for(k=s,j=m+1,i=s;i<=m&&j<=t;k++)
{
if(b[i]<b[j]) a[k]=b[i++];
else a[k]=b[j++];
}
while(i<=m)
a[k++]=b[i++];// 剩下的b[i....m]复制到a中
while(j<=t)
a[k++]=b[j++];// 剩下的b[j....t]复制到a中

}

void Msort(int s,int t)
{
if(s<t)
{
int mid=(s+t)/2;
Msort(s,mid);
Msort(mid+1,t);
Merge(s,t,mid);// 此时s..mid 和 mid+1..t段都是有序的了,再合并这两部分为一个有序的
}
}

void in()
{
printf("输入要排序列的个数:n\n");
scanf("%d",&n);
printf("依次输入要排的n个数\n");
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
}

void out()
{
printf("\n结果:\n");
for(int i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}

int main()
{
while(1)
{
in();
Msort(0,n-1);
out();
}
return 0;
}


View Code

五 基数排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: