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

時間 2021-07-12 17:31:24

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語言裡資料結構的一個問題。。

1 typedef struct list 這裡的list只是一個起的名字,如int是整形,list 是這個結構體的型別。下面的list就是 int i list就是那個i 2 定義的時候沒有下一個節點,一般都是用 p next null 3 書上一般給的都是偽 在實際寫程式中 自己要結合起來才能執...

資料結構c語言描述,資料結構(C語言描述)

include include include define datatype int define maxsize 1000 typedef struct nodebitreenode datatype bt maxsize bitreenode buildbtree datatype bt,in...

資料結構的問題 C,資料結構C 問題

include iostream.h include stdlib.h include stdio.h class lnode lnode lnode creatlist int n 建立鍊表 return h 返回你建立的鏈頭指標 鏈結到main中的附加頭結點上面 void lnode print...