第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求解排序算法

求解排序算法

使用雙向鏈表 時間復(fù)雜度不能超過nlogn,最壞不能退化為n^2 空間復(fù)雜度O(1).求思路
查看完整描述

1 回答

已采納
?
asd8532

TA貢獻(xiàn)143條經(jīng)驗(yàn) 獲得超187個贊

#include?<stdio.h>
#include?<stdlib.h>
#include?<time.h>
//定義類型?所有的排序例子中都是用的int作為data
typedef?int?elemType;?????
//返回值
#define?RET_SUCCESS???(?1??)?
#define?RET_FAILED???(?0??)??
//定義鏈表的長度
#define??LIST_MAX_SIZE??????(10)
//定義鏈表申請內(nèi)存不夠時報(bào)錯信息
#define?NO_MEMORY???printf("Error!?Not?enough?memory!/n");exit(1)
//雙向鏈表結(jié)構(gòu)體定義
typedef?struct?tagDuNode_t
{
?elemType?data;?????
?struct?tagDuNode_t?*?pstNext;?
?struct?tagDuNode_t?*?pstPrior;
}duNode_t;
//初始化雙向鏈表
int?initDuList(duNode_t?**?pstHead)
{
?int?iRet?=?RET_SUCCESS;
?int?iCir?=?0;
?duNode_t?*?pstTmp1?=?NULL;
?duNode_t?*?pstTmp2?=?NULL;
?
?//初始化頭節(jié)點(diǎn)
?*?pstHead?=?(duNode_t?*)malloc(sizeof(duNode_t));
?(*?pstHead)->pstPrior?=?NULL;
?(*?pstHead)->pstNext?=?NULL;
?if?(?!pstHead?)
?{
??NO_MEMORY;
?}
?pstTmp1?=?*?pstHead;
?//鏈表初始化
?srand(?time(NULL)?);//隨機(jī)數(shù)
????for(?iCir?=?0;?iCir?<?LIST_MAX_SIZE;?iCir++?)
?{
??pstTmp2?=?(duNode_t?*)malloc(sizeof(duNode_t));
??if?(?!pstTmp2?)
??{
???NO_MEMORY;
??}
??//賦初值
??pstTmp2->data?=?rand()?%?LIST_MAX_SIZE;
??pstTmp2->pstNext?=?NULL;
??pstTmp1->pstNext?=?pstTmp2;
??pstTmp2->pstPrior?=?pstTmp1;
??pstTmp1?=?pstTmp2;
?}?
?return?iRet;
}
//?打印鏈表?鏈表的data元素是可打印的整形????
int?showDuList(duNode_t?*?pstHead)
{
?int?iRet?=?RET_SUCCESS;
?duNode_t?*?pstTmp?=?pstHead->pstNext;
?if?(?NULL?==?pstHead?)
?{
??printf("鏈表的頭節(jié)點(diǎn)是空/n");
??iRet?=?RET_FAILED;
?}
?else
?{
??while?(?pstTmp?)
??{
???printf("%d?",?pstTmp->data);
???pstTmp?=?pstTmp->pstNext;
??}
??printf("/n");
?}
?return?iRet;
}
/*?刪除包括頭節(jié)點(diǎn)在內(nèi)的所有的節(jié)點(diǎn).?07/04/28??*/
int?destroyList(duNode_t?*?pstHead)
{
?duNode_t?*?pstTmp?=?NULL;???/*?Temp?pointer?for?circle??*/
?int?iRet?=?RET_SUCCESS;
?if?(?!pstHead?)
?{
??printf("Error!?pstHead?is?null/n");
??iRet?=?RET_FAILED;
?}
?else
?{
??while?(?pstHead?)??/*?Free??nodes??????*/
??{
???pstTmp?=?pstHead;
???pstHead?=?pstHead->pstNext;
???free(pstTmp);
??}
??pstHead?=?NULL;
?}
?return?iRet;
}/*?End?of?destroyList----------------------------------------------*/
/*
?一趟快速排序的具體做法是:附設(shè)兩個指針low和high(即第一個和最后一個指針),
?他們的初值分別為low和high設(shè)樞軸(一般為low的值pivot)記錄的關(guān)鍵字
?(即本例子中的整形data)為pivot,則首先從high所指位置
?起向前搜索到第一個關(guān)鍵字小于pivot的記錄和樞軸記錄交換,然后從low所指位置起
?向后搜索,找到第一個關(guān)鍵字大于pivot的記錄和樞軸記錄相互交換,重復(fù)這兩步直
?至low?=?high為止。
*/
duNode_t?*?partion(duNode_t?*?pstHead,?duNode_t?*?pstLow,?duNode_t?*?pstHigh)
{
?elemType?iTmp?=?0;
?elemType?pivot?=?0;
?if?(?!pstHead?)
?{
??printf("錯誤,頭節(jié)點(diǎn)為空!/n");
??exit(1);
?}
?if?(?!pstHead->pstNext?)
?{
??return?pstHead->pstNext;//就一個元素
?}?
?pivot?=?pstLow->data;
?while?(?pstLow?!=?pstHigh?)
?{
??//從后面往前換
??while?(?pstLow?!=?pstHigh?&&?pstHigh->data?>=?pivot?)
??{
???pstHigh?=?pstHigh->pstPrior;
??}
??//交換high?low
??iTmp?=?pstLow->data;
??pstLow->data?=?pstHigh->data;
??pstHigh->data?=?iTmp;
??//從前往后換
??while?(?pstLow?!=?pstHigh?&&?pstLow->data?<=?pivot?)
??{
???pstLow?=?pstLow->pstNext;
??}
??//交換high?low
??iTmp?=?pstLow->data;
??pstLow->data?=?pstHigh->data;
??pstHigh->data?=?iTmp;
?}
?return?pstLow;
}
//快排
void?quick_sort(duNode_t?*?pstHead,?duNode_t?*?pstLow,?duNode_t?*?pstHigh)
{
?duNode_t?*?pstTmp?=?NULL;
?pstTmp?=?partion(pstHead,?pstLow,?pstHigh);
?if?(?pstLow?!=?pstTmp?)
?{
??quick_sort(pstHead,?pstLow,?pstTmp->pstPrior);
?}
?if?(?pstHigh?!=?pstTmp?)
?{
??quick_sort(pstHead,?pstTmp->pstNext,?pstHigh);
?}
?
}
void?main()
{
?duNode_t?*?pstHead?=?NULL;
?duNode_t?*?pstHigh?=?NULL;
?duNode_t?*?pstTmp?=?NULL;
?initDuList(&pstHead);???//初始化
?printf("Before?sorting:/n");
?showDuList(pstHead);???//打印
?pstTmp?=?pstHead->pstNext;
?while?(?pstTmp->pstNext?)
?{
??pstTmp?=?pstTmp->pstNext;
?}
?pstHigh?=?pstTmp;//找到最后一個節(jié)點(diǎn)的指針用于快排時
?quick_sort(pstHead,?pstHead->pstNext,?pstHigh);//快排序
?printf("After?sorting:/n");
?showDuList(pstHead);
?destroyList(pstHead);
?pstHead?=?NULL;
}


查看完整回答
1 反對 回復(fù) 2016-04-26
  • 1 回答
  • 1 關(guān)注
  • 1631 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號