十种排序算法比较Word文档格式.docx

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

十种排序算法比较Word文档格式.docx

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

十种排序算法比较Word文档格式.docx

九、锦标赛排序

十、基数排序

一、冒泡(Bubble)排序

----------------------------------Code从小到大排序n个数------------------------------------

voidBubbleSortArray()

{

for(inti=1;

i<

n;

i++)

for(intj=0;

n-i;

j++)

if(a[j]>

a[j+1])//比较交换相邻元素

inttemp;

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

-------------------------------------------------Code------------------------------------------------

效率O(n2),适用于排序小列表。

二、选择排序

----------------------------------Code从小到大排序n个数--------------------------------

voidSelectSortArray()

intmin_index;

for(inti=0;

n-1;

min_index=i;

for(intj=i+1;

j<

j++)//每次扫描选择最小项

if(arr[j]<

arr[min_index]) 

min_index=j;

if(min_index!

=i)//找到最小项交换,即将这一项移到列表中的正确位置

temp=arr[i];

arr[i]=arr[min_index];

arr[min_index]=temp;

-------------------------------------------------Code-----------------------------------------

效率O(n2),适用于排序小的列表。

三、插入排序

--------------------------------------------Code从小到大排序n个数-------------------------------------

voidInsertSortArray()

i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分

inttemp=arr[i];

//temp标记为未排序第一个元素

intj=i-1;

while(j>

=0&

&

arr[j]>

temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/

arr[j+1]=arr[j];

j--;

arr[j+1]=temp;

------------------------------Code--------------------------------------------------------------

最佳效率O(n);

最糟效率O(n2)与冒泡、选择相同,适用于排序小列表

若列表基本有序,则插入排序比冒泡、选择更有效率。

四、壳(Shell)排序——缩小增量排序

-------------------------------------Code从小到大排序n个数-------------------------------------

voidShellSortArray()

for(intincr=3;

incr<

0;

incr--)//增量递减,以增量3,2,1为例

for(intL=0;

L<

(n-1)/incr;

L++)//重复分成的每个子列表

for(inti=L+incr;

i+=incr)//对每个子列表应用插入排序

intj=i-incr;

while(j>

=0&

arr[j]>

temp)

arr[j+incr]=arr[j];

j-=incr;

arr[j+incr]=temp;

--------------------------------------Code-------------------------------------------

适用于排序小列表。

效率估计O(nlog2^n)~O(n^1.5),取决于增量值的最初大小。

建议使用质数作为增量值,因为如果增量值是2的幂,则在下一个通道中会再次比较相同的元素。

壳(Shell)排序改进了插入排序,减少了比较的次数。

是不稳定的排序,因为排序过程中元素可能会前后跳跃。

----------------------------------------------Code从小到大排序---------------------------------------

voidMergeSort(intlow,inthigh)

if(low>

=high) 

return;

//每个子列表中剩下一个元素时停止

elseintmid=(low+high)/2;

/*将列表划分成相等的两个子列表,若有奇数个元素,则在左边子列表大于右侧子列表*/

MergeSort(low,mid);

//子列表进一步划分

MergeSort(mid+1,high);

int[]B=newint[high-low+1];

//新建一个数组,用于存放归并的元素

for(inti=low,j=mid+1,k=low;

=mid&

j<

=high;

k++)/*两个子列表进行排序归并,直到两个子列表中的一个结束*/

if(arr[i]<

=arr[j];

B[k]=arr[i];

I++;

else

{B[k]=arr[j];

j++;

}

for( 

;

j++,k++)//如果第二个子列表中仍然有元素,则追加到新列表

B[k]=arr[j];

=mid;

i++,k++)//如果在第一个子列表中仍然有元素,则追加到新列表中

for(intz=0;

z<

high-low+1;

z++)//将排序的数组B的所有元素复制到原始数组arr中

arr[z]=B[z];

-----------------------------------------------------Code---------------------------------------------------

效率O(nlogn),归并的最佳、平均和最糟用例效率之间没有差异。

适用于排序大列表,基于分治法。

------------------------------------Code--------------------------------------------

/*快速排序的算法思想:

选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。

*/ 

 

voidswap(inta,intb){intt;

t=a;

a=b;

b=t;

intPartition(int[]arr,intlow,inthigh)

intpivot=arr[low];

//采用子序列的第一个元素作为枢纽元素

while(low<

high)

//从后往前栽后半部分中寻找第一个小于枢纽元素的元素

high&

arr[high]>

=pivot)

--high;

//将这个比枢纽元素小的元素交换到前半部分

swap(arr[low],arr[high]);

//从前往后在前半部分中寻找第一个大于枢纽元素的元素

high&

arr[low]<

=pivot)

++low;

swap(arr[low],arr[high]);

//将这个枢纽元素大的元素交换到后半部分

returnlow;

//返回枢纽元素所在的位置

 

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

当前位置:首页 > 幼儿教育

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

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