数据结构(交换排序-冒泡、快速)

交换排序的基本思想:两两比较排序记录关键字,一旦发现两个记录不满足次序要求时进行交换,直到整个序列全部满足要求为止。

1.冒泡排序

void BubbleSort(SqList &L)
{
        m=L.length -1; flag = 1;//flag用来标记某一趟排序是否发生交换
        while((m>0)&&(flag == 1))
        {
              flag = 0;//flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
              for(j=1;j<m;j++)
                  if(L.r[j].key > L.r[j+1].key)
                 {
                        flag = 1;//flag置为1表示本趟排序发生了变换
                        t= L.r[j];L.r[j] = L.r[j+1];L.r[j+1] = t;//交换前后两个记录
                  }
               --m;
        }
}

2. 快速排序


int Partition(SqList &L,int low,int high)
{//对顺序表中子表r[low..high]进行一趟排序,返回枢纽位置
    L.r[o] = L.r[low];//用子表的第一个记录做枢纽记录
    pivotkey = L.r[low].key;//枢纽记录关键字保存在pivotkey中
    while(low<high)//从表的两端交替地向中间扫描
    {
          while(low<high&&L.r[high].key>= pivotkey) --high;
           L.r[low] = L.r[high];//将比枢纽小的记录移到低端
          while(low<high&&L.r[row].key<= pivotkey) ++low;
           L.r[high] = L.r[low];//将比枢纽大的记录移到高端
           
     }
      L.r[low] = L.r[0];//枢纽记录到位
      return low;//返回枢纽记录

}
void QSort(SqList &L,int low,int high)
{//调用前置初值:low=1,high = L.length
//对顺序表L中的子序列L.r[low..high]进行排序
    if(low<high)
    {
          pivotloc = Partition(L,low,high);
          QSort(L,low,pivotloc-1);//对左子表递归排序
          QSort(L,pivotloc+1,high);//对右子表递归排序
    }
}
void QuickSort(SqList &L)
{
    QSort(L,1,L.length);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容