数据结构:第八章学习小结

思维导图

 

排序方法小结

1.快速排序

 1 void QuickSort(SqList &L)
 2 {
 3     QKSort (L, 1, L.length);//调用QKSort方法进行排序 
 4 } 
 5 
 6 void QSort(SqList &L, int low, int high)
 7 {
 8     int pos;
 9     if(low < high)
10     {
11         pos = Partition(L, low, high);//划分左右子表 得到当前左右子表的分界位置 
12         QKSort(L, low, pos - 1);//递归划分左子表 
13         QKSort(L, pos + 1, high);//递归划分右子表 
14     }
15 }
16 
17 int Partition (SqList &L, int low, int high) 
18 {
19     L.r[0] = L.r[low]; //选择子表的第一个记录作为枢轴 
20     pivotkey = L.r[low].key;//以枢轴记录的值来划分左右子表
21     while (low < high)
22     {
23         //从右向左查找小于privotkey的记录
24         //并将其移到左子表 
25         while(low<high && L.r[high].key>=pivotkey)  
26             --high; 
27         L.r[low] = L.r[high];
28         
29         //从左向右查找答于privotkey的记录
30         //并将其移到右子表 
31         while(low<high && L.r[low].key<=pivotkey )  
32             ++low;
33         L.r[high] = L.r[low];
34     }
35     L.r[low]=L.r[0];//将枢轴记录移到分界位置 
36     return low;//返回当前的枢轴位置 也就是分界位置 
37 }
快速排序

2.堆排序

 1 //调整堆
 2 void HeapAdjust(SqList &L, int low, int high)
 3 {
 4     rc = L.r[low];
 5     for(int j =2*s; j<high; j*=2)
 6     {
 7         //记录值较大的结点下标 
 8         if(j<high && L.r[j].key < L.r[j+1].key) //j<m判断是否存在孩子结点
 9             ++j;
10             
11         //若此时结点的值已经最大,无需再调整,则退出循环 
12         if(rc.key >= L.r[j].key)
13             break;
14              
15         L.r[low] = L.r[j];
16         low = j;
17     }
18     L.r[low] = rc;
19 }
20 
21 //建堆
22 void CreatHeap(SqList &L)
23 {
24     n = L.length;
25     for(int i=n/2; i>0; --i)
26         HeapAdjust(L, i, n);//将无序序列[0,L.lengh]调整为堆 
27 }
28 
29 //堆排序 
30 void HeapSort(SqList &L)
31 {
32     CreatHeap(L);//建堆 
33     for(i=L.length; i>l; --i) 
34     {
35         //交换堆顶元素和L.r[i]元素的位置 
36         x=L.r[1];
37         L.r[1]=L.r[i];
38         L.r[i]=x;
39         //重新调整堆顶 
40         HeapAdjust(L, 1, i-1)
41     }
42 }
堆排序

 

排序方法比较

可参考书上P267页(⚠重要的是理解这些排序算法)

 

心得体会

第八章涉及到了各种关于排序的方法,需要理解不同排序方法和相关复杂度的对比分析,接下来要着重理解各种排序方法的比较,同时也要回顾之前学习的内容,整理复习。最后,这个学期即将结束,我学到了很多新算法新结构,接触到了算法复杂度等新知识,感触颇多,希望在以后的学习中仍能运用老师所教导的知识。

 

posted @ 2020-07-12 22:42  方璇  阅读(151)  评论(0编辑  收藏  举报