資料結構快速排序問題,C語言資料結構 快速排序的問題

2021-07-12 17:31:38 字數 1766 閱讀 2189

1樓:匿名使用者

/*由於你傳遞的l是值傳遞,在快速排序內部出現了一個名字一樣的區域性變數,只是區域性變數被排序了,並不是傳入的變數被排序,可以採用傳地址的方式解決,或者不定義形參,直接採用全域性變數。我使用前者幫你實現了

再者,快速排序**有點問題,幫你修改了下*/#include

#include

#define maxsize 20

typedef struct

redtype;

typedef struct

sqlist;

sqlist l;

int partition(sqlist *l,int low,int high)

l->r[i]=l->r[0];

return i;

}void quicksort (sqlist *l,int low,int high)

}main()

len=l.length-1;

quicksort (&l,1,len);

printf("結果為:");

for(i=1;i<=len;i++)

printf("%4d",l.r[i].key);}

2樓:匿名使用者

int partition(sqlist& l,int low,int high)

void quicksort (sqlist& l,int low,int high)//都加上引用&

c語言資料結構----快速排序的問題 5

3樓:匿名使用者

將++ ,--放在變數名後,

是先使用變數的值,再執行自加(自減)

開始時i為左邊界,j為右邊界

以x=s[i]為中回間答值,將小於x的值放在左邊,大於x的值放在右邊找到大於x的值將其放在s[j]中,j=j-1,找到小於x的值將其放在s[i]中,i=i+1,直到所有數值按兩邊放好。依次在區間n,n/2,n/4,...2執行上述過程,所有數字就排好序了

4樓:匿名使用者

你好,#include

void quicksort(int a[100],int s,int m);

int main()

t=a[s],a[s]=a[j],a[j]=t;

quicksort(a,s,j-1);

quicksort(a,j+1,m);}}

資料結構中快速排序演算法的不足以及改進? 20

5樓:匿名使用者

一般快速排序演算法都是以最左元素作為劃分的基準值,這樣當資料元素本身已經完全有序(不管正序或者逆序)時,每一趟劃分只能將一個元素分割出來,其效率很低:時間複雜度o(n^2),空間複雜度為o(n)

所以改進方法就是找尋合適的基準值,保證不至於在關鍵字有序或者接近有序時發生這個情況,一般可以使用三者取中(就是待劃分序列的頭元素、尾元素、中間元素三者的中間值)、或者隨機選擇等方法,這樣即使關鍵字完全有序,也可以保證時間複雜度o(nlogn),空間複雜度o(logn)

6樓:匿名使用者

chiconysun說的很好,做一點小小的補充:

在資料量較大時,遞迴呼叫本身的消耗對演算法的時間效率也會產生一定影響,採用非遞迴實現,或者在待排序區間小於某值(有實驗資料表明15左右較合適)時,採用其它非遞迴的排序方法代替快速排序,可以達到更高的時間效率。

相對於關鍵值的選取,這一優化帶來的提升有限(親測結果,提升10%左右,選擇了插入排序做替代)。

有關C語言資料結構單連結串列的問題,關於C語言版的資料結構問題 建立單連結串列

因為malloc 有可能出現分配空間失敗的情況,當分配失敗時,malloc 將返回null,而只有在malloc 分配成功的情況下,對為head分配的空間進行操作才有意義,if語句就是檢查head的空間有沒有分配成功,如果分配失敗,就會直接退出程式,而不會執行 head next null 我分別回...

資料結構無向圖問題,資料結構無向圖問題

麻煩把題拍清楚些,裡邊的集合裡後面的的c和e看不太清楚 資料結構問題 什麼是有向圖和無向圖?有向圖在圖中的邊是有方向的,表現出來就是有個箭頭指示方向,節點只能單向通訊或傳遞訊息,相當於單行道,無向圖邊沒方向是雙向的,邊連線的兩個節點有通路可以雙向通訊,類似於雙行道 有向圖就是任意兩個鄰接點之間只有一...

資料結構中,資料結構中,Head Head next什麼意思

頭插法 例如輸入a,b,c 下面兩塊分別表示資料域和指標域,代表null head c next b next a 實現語句 無頭結點 head null while 迴圈條件 頭插入法的輸出順序與你的輸入順序相反 尾插法 無頭結點 head a next b next c 實現 head null...