數(shù)據(jù)結(jié)構(gòu)(交換排序-冒泡、快速)

交換排序的基本思想:兩兩比較排序記錄關(guān)鍵字,一旦發(fā)現(xiàn)兩個記錄不滿足次序要求時進(jìn)行交換,直到整個序列全部滿足要求為止。

1.冒泡排序

void BubbleSort(SqList &L)
{
        m=L.length -1; flag = 1;//flag用來標(biāo)記某一趟排序是否發(fā)生交換
        while((m>0)&&(flag == 1))
        {
              flag = 0;//flag置為0,如果本趟排序沒有發(fā)生交換,則不會執(zhí)行下一趟排序
              for(j=1;j<m;j++)
                  if(L.r[j].key > L.r[j+1].key)
                 {
                        flag = 1;//flag置為1表示本趟排序發(fā)生了變換
                        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]進(jìn)行一趟排序,返回樞紐位置
    L.r[o] = L.r[low];//用子表的第一個記錄做樞紐記錄
    pivotkey = L.r[low].key;//樞紐記錄關(guān)鍵字保存在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)
{//調(diào)用前置初值:low=1,high = L.length
//對順序表L中的子序列L.r[low..high]進(jìn)行排序
    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);
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容