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...