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

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

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語言資料結構 快速排序的問題

將 放在變數名後,是先使用變數的值,再執行自加 自減 開始時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...

資料結構C語言氣泡排序問題

修改 for j n 1 j i j e69da5e887aa62616964757a686964616f31333330343162 if r j 1 key key 瞭解一下氣泡排序 bubblesort 的基本概念 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個...

c語言資料結構賦值問題,c語言版資料結構問題?

對應的結構體指標,那麼函式要定義成void initstack struct snode l 還有這程式有錯,傳進來的l只是副本,他的改變不影響到實參。應該用指標引數型別或引用型別。include include struct snode main int initstack struct snod...