教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

排序算法总结大全(10种)

来源:网络收集 时间:2026-09-02
导读: 数据结构中的10种排序算法总结 10种排序算法总结 2011-09-20 12:01:17 我来说两句 收藏 我要投稿 排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作

数据结构中的10种排序算法总结

10种排序算法总结

2011-09-20 12:01:17 我来说两句

收藏 我要投稿

排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准:

(1)执行时间

(2)存储空间

(3)编程工作

对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,

主要排序法有:

一、冒泡(Bubble)排序——相邻交换

二、选择排序——每次最小/大排在相应的位置

三、插入排序——将下一个插入已排好的序列中

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

五、归并排序

六、快速排序

七、堆排序

八、拓扑排序

九、锦标赛排序

十、基数排序

一、冒泡(Bubble)排序

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

------------------------------------

void BubbleSortArray()

{

for(int i=1;i<n;i++)

{

for(int j=0;i<n-i;j++)

{

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

{ 1)为首要。 (

数据结构中的10种排序算法总结

int temp;

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

}

}

}

}

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

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

二、选择排序

----------------------------------Code 从小到大排序n个数-------------------------------- void SelectSortArray()

{

int min_index;

for(int i=0;i<n-1;i++)

{

min_index=i;

for(int j=i+1;j<n;j++)//每次扫描选择最小项

if(arr[j]<arr[min_index]) min_index=j;

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

{

int temp;

temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp;

}

}

}

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

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

三、插入排序

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

-------------------------------------

数据结构中的10种排序算法总结

void InsertSortArray()

{

for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分

{

int temp=arr[i];//temp标记为未排序第一个元素

int j=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个数

-------------------------------------

void ShellSortArray()

{

for(int incr=3;incr<0;incr--)//增量递减,以增量3,2,1为例

{

for(int L=0;L<(n-1)/incr;L++)//重复分成的每个子列表

{

for(int i=L+incr;i<n;i+=incr)//对每个子列表应用插入排序

{

int temp=arr[i];

int j=i-incr;

while(j>=0&&arr[j]>temp)

{

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

数据结构中的10种排序算法总结

j-=incr;

}

arr[j+incr]=temp;

}

}

}

}

--------------------------------------Code------------------------------------------- 适用于排序小列表。

效率估计O(nlog2^n)~O(n^1.5),取决于增量值的最初大小。建议使用质数作为增量值,因为如果增量值是2的幂,则在下一个通道中会再次比较相同的元素。

壳(Shell)排序改进了插入排序,减少了比较的次数。是不稳定的排序,因为排序过程中元素可能会前后跳跃。

五、归并排序

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

---------------------------------------

void MergeSort(int low,int high)

{

if(low>=high) return;//每个子列表中剩下一个元素时停止

else int mid=(low+high)/2;/*将列表划分成相等的两个子列表,若有奇数个元素,则在左边子列表大于右侧子列表*/

MergeSort(low,mid);//子列表进一步划分

MergeSort(mid+1,high);

int [] B=new int [high-low+1];//新建一个数组,用于存放归并的元素

for(int i=low,j=mid+1,k=low;i<=mid && j<=high;k++)/*两个子列表进行排序归并,直到两个子列表中的一个结束*/

{

if (arr[i]<=arr[j];)

{

B[k]=arr[i];

I++;

}

else

{ B[k]=arr[j]; j++; }

数据结构中的10种排序算法总结

}

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

B[k]=arr[j];

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

B[k]=arr[i];

for(int z=0;z<high-low+1;z++)//将排序的数组B的 所有元素复制到原始数组arr中

arr[z]=B[z];

}

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

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

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

六、快速排序

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

/*快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。

*/ void swap(int a,int b){int t;t =a ;a =b ;b =t ;}

int Partition(int [] arr,int low,int high)

{

int pivot=arr[low];//采用子序列的第一个元素作为枢纽元素

while (low < high)

{

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

while (low < high && arr[high] >= pivot)

{

--high;

}

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

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

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

while (low <high &&arr [low ]<=pivot )

{

+ …… 此处隐藏:3615字,全部文档内容请下载后查看。喜欢就下载吧 ……

排序算法总结大全(10种).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/42872.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)