Page 132 - 高中 信息技术 选择性必修1 数据与数据结构
P. 132

第五章  数据结构的应用







                             for(int i=0;i<n;i++)  //需要进行n-1趟排序
                            {
                               for(int j=0;j<n-i;j++)  //每一趟排序需要比较n-i次

                                 if(r[j].key>r[j+1].key)
                              {
                                   t=r[j];r[j]=r[j+1];r[j+1]=t;  //交换r[j]和r[j+1]
                              }

                            }
                           }

                                             广东教育出版社
                        5.3.3 快速排序




                           快速排序是平均排序次数最少的排序算法之一,也是目前平均速度最快的排序,故称

                      快速排序(Quick Sort),特别适合于数据量较多的排序。
                           1.快速排序的基本思想

                           快速排序采用分治法的策略:将原问题划分成规模更小但与原问题相似的小问题,然
                      后用递归法解决这些小问题,最后将它们组合形成原问题的解。

                           快速排序的基本思想是:从待排序元素序列中选取一个元素(通常是第一个元素)作

                      为基准元素,其关键字设为key,然后将其余关键字小于key的元素移至key前面,而将关键
                      字大于key的元素移至key后面,实现将待排序元素序列分为两个子表,最后将关键字key
                      的元素插入其分界线的位置上,这个过程称为一趟快速排序;通过这一趟划分后,以关键

                      字key的元素为界,待排序列被分为两个子表,且前面子表中所有元素的关键字均不大于

                      key,而后面子表中所有元素的关键字均大于key。继续对分割后的子表按上述原则进行划
                      分,直到所有子表的表长不超过1为止,此时的元素序列就成了一个有序序列。
                           2.快速排序算法的步骤

                           以关键字升序排列为例,设待排序列存放在数组a[1..n]中,n为元素个数, i、j分别是

                      待排序列首尾关键字的下标,初值分别为1和n,令a[1]作为基准元素赋给pivotkey:
                           (1)j从右往左扫描,若i<j且a[j].key >= pivotkey,j=j-1,否则将a[j]与a[i]交换。
                           (2)i从左往右扫描,若i<j且a[i].key < pivotkey,i=i+1,否则将a[i] 与a[j] 交换。

                           (3)重复执行(1)和(2),直到出现i≥j,则将基准元素pivotkey移动到a[i]中。此

                      时整个元素序列在位置i被划分成两个部分,前一部分的元素关键字都小于或等于a[i].key,
                      后一部分元素的关键字都等于或大于a[i].key,即完成了一趟快速排序。
                           (4)继续对分割后的子表进行上述划分,直至所有子表的表长不超过1为止,此时的

                      元素序列就成了一个有序序列。



             124 124







          21X2204.indd   124                                                                                       2019/9/26   13:53:44
   127   128   129   130   131   132   133   134   135   136   137