八大排序算法Word文件下载.docx
- 文档编号:15314788
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:32
- 大小:658.27KB
八大排序算法Word文件下载.docx
《八大排序算法Word文件下载.docx》由会员分享,可在线阅读,更多相关《八大排序算法Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
,int
i){
2
cout<
<
i
"
:
;
3
for(int
j=
0;
j<
8;
j++){
4
a[j]
5
}
6
endl;
7}
8
9
10void
InsertSort(int
n)
11{
12
i=
1;
i<
n;
i++){
13
if(a[i]
a[i-1]){
//若第i个元素大于i-1元素,直接插入。
小于的话,移动有序表后插入
14
i-1;
15
x
=
a[i];
//复制为哨兵,即存储待排序元素
16
a[i]
a[i-1];
//先后移一个元素
17
while(x
a[j]){
//查找在有序表的插入位置
18
a[j+1]
a[j];
19
j--;
//元素后移
20
21
x;
//插入到正确位置
22
23
print(a,n,i);
//打印每趟排序的结果
24
25
26}
27
28int
main(){
29
a[8]
{3,1,5,7,2,4,9,6};
30
InsertSort(a,8);
31
print(a,8,8);
32}
效率:
时间复杂度:
O(n^2).
其他的插入排序有二分插入排序,2-路插入排序。
2.插入排序—希尔排序(Shell`sSort)
希尔排序是1959年由D.L.Shell提出来的,相对直接排序有较大的改进。
希尔排序又叫缩小增量排序
基本思想:
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
操作方法:
1选择一个增量序列t1,t2,…,tk,其中ti>
tj,tk=1;
2按增量序列个数k,对序列进行k趟排序;
3每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m的子序列,分别对各子表进行直接插入排序。
仅增量因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度。
希尔排序的示例:
算法实现:
我们简单处理增量序列:
增量序列d={n/2,n/4,n/8.....1}n为要排序数的个数
先将要排序的一组记录按某个增量d(n/2,n为要排序数的个数)分成若干组子序列,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。
继续不断缩小增量直至为1,最后使用直接插入排序完成排序。
8/**
*
直接插入排序的一般形式
10
11
@param
dk
缩小增量,如果是直接插入排序,dk=1
*/
15void
ShellInsertSort(int
n,
dk)
16{
dk;
++i){
a[i-dk]){
j
i-dk;
a[i-dk];
//首先后移一个元素
while(x<
a[j]&
&
j>
=0){
a[j+dk]
-=
26
28
print(a,
n,i
);
31}
32
33/**
34
先按增量d(n/2,n为要排序数的个数进行希尔排序
35
36
37void
shellSort(int
n){
38
39
n/2;
40
while(
>
1
){
41
ShellInsertSort(a,
dk);
42
dk/2;
43
44}
45int
46
47
//ShellInsertSort(a,8,1);
//直接插入排序
48
shellSort(a,8);
//希尔插入排序
49
50}
希尔排序时效分析很难,关键码的比较次数与记录移动次数依赖于增量因子序列d的选取,特定情况下可以准确估算出关键码的比较次数和记录的移动次数。
目前还没有人给出选取最好的增量因子序列的方法。
增量因子序列可以有各种取法,有取奇数的,也有取质数的,但需要注意:
增量因子中除1外没有公因子,且最后一个增量因子必须为1。
希尔排序方法是一个不稳定的排序方法。
3.选择排序—简单选择排序(SimpleSelectionSort)
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;
然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
简单选择排序的示例:
第一趟,从n个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换;
以此类推.....
第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,
直到整个序列按关键码有序。
第"
i+1
趟
数组的最小值
@return
数组的键值
13int
SelectMinKey(int
i)
14{
k
i;
j=i+1
++j)
{
if(a[k]
a[j])
j;
return
k;
20}
22/**
选择排序
26void
selectSort(int
key,
tmp;
++i)
key
SelectMinKey(a,
n,i);
//选择最小的元素
if(key
!
tmp
a[key];
a[key]
//最小元素与第i位置元素互换
33
i);
35}
36int
37
初始值:
endl<
selectSort(a,
8);
44
45}
简单选择排序的改进——二元选择排序
简单选择排序,每趟循环只能确定一个元素排序后的定位。
我们可以考虑改进为每趟循环确定两个元素(当前趟最大和最小记录)的位置,从而减少排序所需的循环次数。
改进后对n个数据进行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八大 排序 算法