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

第五章  数据结构的应用









                           3.快速排序的算法实现

                           一趟快速排序(即将元素序列进行一次划分)的算法实现如下:
                           int Partition(ShangPinType r[],int i,int j)
                           //对顺序表r[i..j]的元素进行一趟排序,使基准元素前面元素的关键字小于基准

                           //元素的关键字,基准元素后面元素的关键字大于等于基准元素的关键字,并返回
                           //基准元素位置
                           {

                             ShangPinType t;
                                             广东教育出版社
                             int pivotkey=r[i].key;  //用顺序表的第一个元素作为基准元素
                             while(i<j)
                             {

                               while(i<j&&r[j].key>pivotkey)  //从右向左扫描
                                 --j;

                               t=r[i];r[i]=r[j];r[j]=t;  //将比基准元素小的元素交换到左端
                               while(i<j&&r[i].key<=pivotkey) //从左向右扫描
                                 ++i;
                               t=r[i];r[i]=r[j];r[j]=t;  //将比基准元素大的元素交换到右端

                            }
                             return i; //返回基准元素所在位置
                           }

                           通过多次递归调用一趟快速排序算法,就可完成整个快速排序,其算法实现如下:
                           void QuickSort(ShangPinType r[],int i,int j)

                           //对顺序表r[i..j]作快速排序
                           {
                             int pivotloc; //pivotloc是基准元素所在位置
                             if(i<j)       //顺序表的元素个数大于1

                             {
                               pivotloc=Partition(r,i,j);   //将r[i..j]一分为二
                               QuickSort(r,i,pivotloc-1);  //对左子表递归排序

                               QuickSort(r,pivotloc+1,j);  //对右子表递归排序
                            }
                           }











             126 126







          21X2204.indd   126                                                                                       2019/9/26   13:53:44
   129   130   131   132   133   134   135   136   137   138   139