几种经典排序Word文件下载.docx

上传人:b****6 文档编号:16136174 上传时间:2022-11-20 格式:DOCX 页数:14 大小:233.47KB
下载 相关 举报
几种经典排序Word文件下载.docx_第1页
第1页 / 共14页
几种经典排序Word文件下载.docx_第2页
第2页 / 共14页
几种经典排序Word文件下载.docx_第3页
第3页 / 共14页
几种经典排序Word文件下载.docx_第4页
第4页 / 共14页
几种经典排序Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

几种经典排序Word文件下载.docx

《几种经典排序Word文件下载.docx》由会员分享,可在线阅读,更多相关《几种经典排序Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

几种经典排序Word文件下载.docx

  81,22,73,93,43,14,55,65,28,39

  接着再进行一次分配,这次是根据十位数来分配:

  114

  22228

  339

  443

  555

  665

  773

  881

  993

  14,22,28,39,43,55,65,73,81,93

这时候整个数列已经排序完毕;

如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。

插入排序:

归并排序:

  归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。

  如 设有数列{6,202,100,301,38,8,1}

  初始状态:

[6][202][100][301][38][8][1]比较次数

  i=1[6202][100301][838][1] 3

  i=2[6100202301][1838] 4

  i=3 [16838100202301]4

总计:

 11次

堆排序:

#include"

stdafx.h"

iostream"

usingnamespacestd;

//所有排序均按从小到大

//显示数组

voidDisplay(inta[],intn)

{

inti;

for(i=1;

i<

=n;

i++)

{

cout<

<

a[i]<

"

"

;

}

cout<

endl;

}

//交换元素

voidswap(int&

a,int&

b)

inttemp;

temp=a;

a=b;

b=temp;

//冒泡排序

voidBubbleSort(inta[],intn)

{

inti,j;

冒泡排序过程:

{

boolexchange=false;

for(j=1;

j<

=n-i;

j++)

if(a[j]>

a[j+1])

{//交换记录

swap(a[j],a[j+1]);

exchange=true;

}

Display(a,10);

if(!

exchange)//exchange若为假说明数组已排序成功

return;

}

}

//简单排序

voidSelectSort(inta[],intn)

简单排序过程:

=n-1;

{

for(j=i+1;

j++)

if(a[j]<

a[i])

{

swap(a[i],a[j]);

}

Display(a,10);

}

//直接插入排序

//在start位开始到end位结束的数组向后移一位,插入数据data

voidMoveStep(inta[],intstart,intend,intdata)

for(i=end;

i>

=start;

i--)

a[i+1]=a[i];

a[start]=data;

voidSimpleInsertSort(inta[],intn)

for(i=2;

for(j=1;

=i-1;

if(a[i]<

a[j])

//插入

MoveStep(a,j,i-1,a[i]);

//基数排序

voidBucketSort(inta[],intn)

intm[10][10];

inti,j,k;

//m[i][0]存放桶中个数

基数排序过程:

for(i=0;

=9;

m[i][0]=0;

j=a[i]%10;

m[j][0]=m[j][0]+1;

//桶中个数加

m[j][m[j][0]]=a[i];

//个数位整理数组

k=1;

n;

=m[i][0];

a[k++]=m[i][j];

//m[i][0]存放桶中个数清零

//十位数整理数组

j=a[i]/10;

 

//归并排序

voidMerge(intA[],intlow,intmid,inthigh)

inti=low;

intj=mid+1;

int*T;

T=(int*)malloc(sizeof(int)*(high));

intk=0;

while(i<

=mid&

&

j<

=high)

if(A[i]<

=A[j])

T[k++]=A[i++];

else

T[k++]=A[j++];

if(i==mid+1)

while(j<

=high)

while(i<

=mid)

for(i=low,k=0;

i<

=high;

i++,k++)

A[i]=T[k];

free(T);

voidMergeSort(inta[],intlow,inthigh)

intmid=0;

if(low<

high)

mid=(low+high)/2;

MergeSort(a,low,mid);

MergeSort(a,mid+1,high);

Merge(a,low,mid,high);

//快速排序

voidQuickSort(inta[],intlow,inthigh)

intj,index;

if(low>

=high)

return;

swap(a[low],a[(low+high)/2]);

index=low;

快速排序过程:

for(j=low+1;

j<

j++)

if(a[j]<

a[low])

swap(a[++index],a[j]);

swap(a[low],a[index]);

QuickSort(a,low,index-1);

QuickSort(a,index+1,high);

//希尔排序

voidMoveStep(inta[],intstart,intend,intdata,intstep)

i=i-step)

a[i+step]=a[i];

//MoveStep(a,i,j-dk,a[j],dk);

voidShellSort(inta[],intn)

int*step,k,i,t,dk,j;

k=n;

step=(int*)malloc(sizeof(int)*(n/2));

i=0;

do

k=k/2;

step[i++]=k;

}while(k>

0);

while(dk=step[i++]>

0)

for(i=1;

for(j=i+dk;

j=j+dk)

{

for(k=i;

k<

=(j-dk);

k=k+dk)

if(a[k]>

{

//插入

MoveStep(a,k,j-dk,a[j],dk);

}

//堆排序

voidmain()

inta[11]={-1,22,1,54,47,9,10,3,2,12,6};

inti;

原数据:

//BubbleSort(a,10);

//cout<

endl<

排序后数据:

//Display(a,10);

//SelectSort(a,10);

//Display

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1