博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法
阅读量:5907 次
发布时间:2019-06-19

本文共 2827 字,大约阅读时间需要 9 分钟。

插入排序:

  思路:设有一组关键字{k1,k2,k3,...},排序一开始就认为k1是一个有序序列,让k2插入上述表长为1的有序序列,使之成为表长为2的有序序列,然后让k3插入上述表长为2的有序序列,使之成为表长为3的有序序列,以此类推,最后让kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列。

#include 
using namespace std;void InsertSort(int a[], int size);void main(){ int a[]={
2,3,1,8,6,5,9,4,7}; for(int j=0;j<9;j++) cout<
<<' '; cout<
=0) { a[j+1]=a[j]; j--; } a[j+1] = tmp; }}

冒泡排序:

  思路:

  1.让j取n-1至1,将a[j]与a[j-1]比较,如果a[j]<a[j-1],则将交换俩数的位置,否则不交换,第一趟比较结束后,最小的数就换到了最前面。

  2.让j取n-1至2,重复上述比较对换操作,最终a[1]中存放的是剩余n-1个数中最小的那个。

  3.以此类推,直到j取n-1至n-2,将a[n-1]与a[n-2]比较,小的放在a[n-2]的位置。

  经过n-1躺冒泡处理,数组即按从小到大的顺序排列完毕。

void BubbleSort(int a[],int size){    int i,j;    for(i=1;i
=i;j--) { if(a[j]

归并排序:

  思路:

  1.把n个数看成n个长度为1的有序子表。

  2.进行两两归并使记录关键字有序,得到n/2个长度为2的有序子表。

  3.重复2步,直到所有记录归并成一个长度为n的有序表。

#include 
using namespace std;void MergeSort(int a[], int size);void MSort(int a[], int TmpArray[], int left, int right);void Merge(int a[], int TmpArray[], int lpos, int leftend, int rpos, int rightend);void main(){ int a[]={
2,3,1,8,6,5,9,4,7}; for(int j=0;j<9;j++) cout<
<<' '; cout<

堆排序:

  思路:

  1.建立最大堆树。从第一个非叶子节点i开始,将以i节点为跟的子树调整为堆,然后令i=i-1,再将以i节点为跟的子树调整为堆,以此类推,直到i=1,最大堆树建成。

  2.堆排序。将堆顶元素与堆中最后一个元素交换位置,然后将前n-1元素调整为堆,交换堆顶元素与堆中倒数第二个元素,再恢复成堆,以此类推

#include 
using namespace std;void HeapSort(int a[], int size);void MaxHeapify(int a[], int index, int size);void main(){ int a[] = {
19, 1, 10, 14, 16, 4, 7, 9, 3, 2, 8, 5, 11}; HeapSort(a, sizeof(a)/sizeof(int)); system("pause");}//堆排序void HeapSort(int a[], int size){ int i, tmp; //建立最大堆树 for(int i=size/2-1;i>=0;i--) MaxHeapify(a, i, size); for(i=size-1;i>0;i--) { tmp=a[0]; a[0]=a[i]; a[i]=tmp; MaxHeapify(a, 0, i); }}//单一节点调整void MaxHeapify(int a[], int index, int size){ int l,r,tmp,largest; l=2*index+1; r=2*index+2; if(l
a[index])//如果l>=size则数组越界 largest=l; else largest=index; if(r
a[largest]) largest=r; if(largest!=index) { tmp=a[index]; a[index]=a[largest]; a[largest]=tmp; MaxHeapify(a, largest, size); }}

快排:

  思路:

  1.分解。数组a[p..r]被划分成两个子数组a[a..q-1]和a[q+1..r],使得a[a..q-1]中的每个元素都小于等于a[q],而且,小于等于a[q+1..r]中的元素

  2.解决。通过递归调用快速排序,对子数组a[a..q-1]和a[q+1..r]排序

#include 
using namespace std;void quick_sort(int A[], int left, int right);int partition(int A[], int left, int right);void main(){ int a[]={
2,5,9,3,5,7,4,6,11,8}; quick_sort(a, 0, 9); for(int i=0;i<10;i++) cout<
<<" "; cout<

 

转载于:https://www.cnblogs.com/clownfish/archive/2012/06/03/2532724.html

你可能感兴趣的文章
谷歌大神Jeff Dean:大规模深度学习最新进展 zz
查看>>
javaweb学习总结(八)——HttpServletResponse对象(二)
查看>>
CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能
查看>>
jquery------提供灵活的方法参数
查看>>
Android ContentProvider和getContentResolver
查看>>
深入理解javascript描述元素内容的5个属性
查看>>
Android 知识梳理
查看>>
poj 1331 Multiply
查看>>
解决java.lang.OutOfMemoryError: unable to create new native thread问题
查看>>
POJ - 3294 Life Forms
查看>>
wallproxy on ubuntu usage
查看>>
【反射】使用反射来获取注解原数据信息-类信息-方法信息等
查看>>
当代前端应该怎么写这个hello world?
查看>>
[转载]替代Visio的免费软件:EDraw Mind Map
查看>>
(C#)AJAX post方式传值
查看>>
【转】Installing the libv8 Ruby gem on Centos 5.8
查看>>
【原创】宿主机远程登录虚拟机(windows server 2003系统)
查看>>
【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码
查看>>
HANDLER命令与实现
查看>>
Linux(Centos)之安装tomcat并且部署Java Web项目
查看>>