2020-06-15(C語(yǔ)言)數(shù)據(jù)結(jié)構(gòu)交換排序--快速排序

//快速排序

include <stdio.h>

include <stdlib.h>

define MAXSIZE 100

typedef struct SqList
{
int r[MAXSIZE + 1];
int length;
} SqList;
int Partition(SqList *L, int low, int high)
{ //對(duì)順序表L中的子表r[low..high]進(jìn)行一趟排序,返回樞軸位置
int piv;
L->r[0] = L->r[low]; //用子表的第一個(gè)記錄做樞軸記錄
piv = L->r[low]; //樞軸記錄關(guān)鍵字保存在piv中
while (low < high) //從表的兩端交替地向中間掃描
{
while (low < high && L->r[high] >= piv)
{
high--;
}
L->r[low] = L->r[high]; //將比樞軸記錄小的記錄移到低端
while (low < high && L->r[low] <= piv)
{
low++;
}
L->r[high] = L->r[low]; //將比樞軸記錄小的記錄移到高端
}
L->r[low] = L->r[0]; //樞軸記錄到位
return low; //返回樞軸位置
}
void QSort(SqList *L, int low, int high) //對(duì)順序表L中的子序列L->r[low]到L->[high]做快速排序
{
int piv;
if (low < high) //長(zhǎng)度大于1
{
piv = Partition(L, low, high); //將L->r[low]到L->r[high]一分為二,piv是樞軸位置
QSort(L, low, piv - 1); //對(duì)左子表遞歸排序
QSort(L, piv + 1, high); //對(duì)右子表遞歸排序
}
}
void QuickSort(SqList *L)
{
QSort(L, 1, L->length); //對(duì)順序表L做快速排序
}
int main()
{
SqList *L;
int i;
L = (SqList *)malloc(sizeof(SqList));
printf("請(qǐng)輸入長(zhǎng)度:");
scanf("%d", &L->length);
printf("請(qǐng)輸入元素:");
for (i = 1; i <= L->length; i++)
{
scanf("%d", &L->r[i]);
}
printf("排序前:");
for (i = 1; i <= L->length; i++)
{
printf("%d ", L->r[i]);
}
printf("\n");
QuickSort(L);
printf("排序后:");
for (i = 1; i <= L->length; i++)
{
printf("%d ", L->r[i]);
}
printf("\n");
return 0;
}

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

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