排序算法Word文档格式.docx

上传人:b****5 文档编号:18895981 上传时间:2023-01-02 格式:DOCX 页数:10 大小:257.55KB
下载 相关 举报
排序算法Word文档格式.docx_第1页
第1页 / 共10页
排序算法Word文档格式.docx_第2页
第2页 / 共10页
排序算法Word文档格式.docx_第3页
第3页 / 共10页
排序算法Word文档格式.docx_第4页
第4页 / 共10页
排序算法Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

排序算法Word文档格式.docx

《排序算法Word文档格式.docx》由会员分享,可在线阅读,更多相关《排序算法Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

排序算法Word文档格式.docx

i>

=0;

i--){

while(2*i+1<

n){

j=2*i+1;

if((j+1)<

if(a[j]<

a[j+1])

j++;

}

if(a[i]<

a[j]){

t=a[i];

//交换数据

a[i]=a[j];

a[j]=t;

i=j;

else{

break;

//输出构成的堆

System.out.println("

原数据构成的堆:

"

);

for(h=0;

h<

n;

h++){

System.out.print("

"

+a[h]);

//输出

\n"

for(i=n-1;

0;

t=a[0];

//于第i个记录交换

a[0]=a[i];

a[i]=t;

k=0;

while(2*k+1<

i){

j=2*k+1;

a[j+1]){

if(a[k]<

a[j]){

t=a[k];

a[k]=a[j];

k=j;

}else{

The"

+(n-i)+"

time'

sresultis:

//输出每步排序的结果

for(h=0;

h++){

+a[h]);

System.out.println();

}

二、交换排序

1、冒泡排序

(1)、对数组中的各数据,依次比较相邻的两个元素的大小。

(2)、如果前面的数据大于后面的数据,就交换着两个数据。

经过第一轮的多次比较排序后,便可把最小的数据排好。

(3)、再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组各数据的大小。

/*publicstaticint[]BubbleSort(int[]numbers){

inttemp;

//中间变量,交换变量用

intj;

for(inti=0;

i<

numbers.length;

i++){//从小到大的排列顺序

for(j=i+1;

j<

j++){

if(numbers[i]>

=numbers[j]){//依次比较

temp=numbers[i];

numbers[i]=numbers[j];

numbers[j]=temp;

for(inth=0;

h<

h++){

+numbers[h]);

//Output

returnnumbers;

}*///冒泡排序

2、快速排序

(1)、设定一个分界值,将数组分成左右两部分

(2)、将大于等于分界值的数据集中到数组右边,小于的集中到左边

(3)、然后,左边和右边的数据可以独立排序

(4)、重复上述过程,递归定义。

publicstaticvoidQuickSort(int[]a,intleft,intright){

intf,t;

intrtemp=right,ltemp=left;

f=a[(right+left)/2];

//分界值

while(ltemp<

rtemp){

while(a[ltemp]<

f){

++ltemp;

while(a[rtemp]>

--rtemp;

if(ltemp<

=rtemp){

t=a[ltemp];

a[ltemp]=a[rtemp];

a[rtemp]=t;

if(ltemp==rtemp){

ltemp++;

if(left<

rtemp){

QuickSort(a,left,ltemp-1);

//递归调用

if(ltemp<

right){

QuickSort(a,rtemp+1,right);

三、插入排序

1、插入排序

先比较前两个数的大小,再将后面的数按照大小插入到合适的位置去。

比如最小则插入到第一位前面,比当前数还要大则插入到最后面。

2、Shell排序(效率较高的一种排序方法)

(1)、将有n个元素的数组分成n/2个数字序列,第一个数据和第n/2+1个数据为一对,·

·

(2)、依次循环使每一个序列对排好顺序

(3)、然后,再变为n/4个序列,再次排序

(4)、不断重复上述过程,直至序列减为最后一个。

四、合并排序

首先将含有n个节点的待排序数据序列看做有n个长度为1的有序子表组成,将他们两两合并,得到长度为2的若干有序子表;

然后,再对这些子表进行两两合并,得到长度为4的若干有序子表;

,重复上述过程,一直重复到最后的子表长度为n,从而完成排序过程。

publicstaticvoidmergeOne(int[]a,int[]b,intn,intlen){//完成合并一次的方法,在mergeSort中调用,避免mergeSort处理中造成递归

inti,j,k,s,e;

s=0;

while(s+len<

e=s+2*len-1;

if(e>

=n){

e=n-1;

//相邻有序段合并

k=s;

i=s;

j=s+len;

while(i<

s+len&

&

j<

=e){

=a[j]){

b[k++]=a[i++];

b[k++]=a[j++];

s+len){

while(j<

s=e+1;

if(s<

for(;

s<

n;

s++){

b[s]=a[s];

publicstaticvoidmergeSort(int[]a,intn){//合并排序

inth,count,len,f;

count=0;

//排序步骤

len=1;

//有序子列的长度

f=0;

//变量f作为标志

int[]p=newint[n];

while(len<

n){

if(f==1){

mergeOne(p,a,n,len);

//p合并到a

else{

mergeOne(a,p,n,len);

//a合并到p

len=len*2;

//增加有序序列的长度

f=1-f;

//标志量,每次循环一次后改变f的值,使数组按对应的长度大小合并

count++;

第"

+count+"

timessort'

a.length;

if(f==1){

h<

a[h]=p[h];

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

当前位置:首页 > 求职职场 > 简历

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

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