排序 |
尚未結案
|
hbl1123
一般會員 發表:2 回覆:5 積分:1 註冊:2005-07-21 發送簡訊給我 |
對不起,我是上次問排序的,雖然有得到答案,不過,不是我想要的,如果要照我的語意去做的話,應該怎麼做呢?
我有兩個btn(一個產生陣列、一個排序)、一個listbox(顯示陣列的所有數值,以及排序好的數值),假如我需要二個陣列(例如a和b陣列),a陣列是產生亂數用的,而b陣列則是儲存a陣列中已排序好的數值(由大到小)
註:在a陣列中,先找出最大值(xMax),然後此最大值放在b陣列中,在把a陣列的最大值*(-1)[這樣下次尋找後,就不會出現重覆],再從a陣列找出除了xMax以外的最大值,再放入b陣列,以此類推~最後,b陣列就可以在listbox上顯示排序好的陣列。
感謝你們抽空為我解答~
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
anderslee
初階會員 發表:2 回覆:32 積分:26 註冊:2002-06-03 發送簡訊給我 |
引言: 對不起,我是上次問排序的,雖然有得到答案,不過,不是我想要的,如果要照我的語意去做的話,應該怎麼做呢? 我有兩個btn(一個產生陣列、一個排序)、一個listbox(顯示陣列的所有數值,以及排序好的數值),假如我需要二個陣列(例如a和b陣列),a陣列是產生亂數用的,而b陣列則是儲存a陣列中已排序好的數值(由大到小) 註:在a陣列中,先找出最大值(xMax),然後此最大值放在b陣列中,在把a陣列的最大值*(-1)[這樣下次尋找後,就不會出現重覆],再從a陣列找出除了xMax以外的最大值,再放入b陣列,以此類推~最後,b陣列就可以在listbox上顯示排序好的陣列。 感謝你們抽空為我解答~<<你自己都把你的解法說出來了, 為何老是要別人幫你寫程式, 臉皮超厚哦!>> 說得好!! 己把問題想清楚了,不像是新手的毫無頭緒... 真的是! <<建議您看一下排序演算法(冒泡法、插入排序、合併排序、快速排序).>> 我想也不必了.... 既然最後是要放在 listbox, 也就是 TstringList. 不如簡單的把 TstringList 設定為 sorted := true; Duplicates 就 ignor 把 A 陣列的亂數加入 tstringlist 再 assign 到 listbox 就完成了 |
hbl1123
一般會員 發表:2 回覆:5 積分:1 註冊:2005-07-21 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); public A: array of Integer; procedure MyQuickSort(var arry: array of Integer; L, R: Integer; Direction: Integer); end; var Form1: TForm1; implementation //產生亂數 procedure TForm1.Button1Click(Sender: TObject); var I, Len: Integer; begin Len := Random(100) 100;//Len最少100 SetLength(A, Len); for I := 0 to Length(A)-1 do A[I] := Random(MaxInt); end; procedure TForm1.Button2Click(Sender: TObject); var I: Integer; B: array of Integer; begin ListBox1.Clear; if Length(A) > 0 then begin SetLength(B, Length(A)); try //Array B 從 Array A 複製一份資料 Move(Pointer(A)^, Pointer(B)^, Length(A) * SizeOf(Integer)); //排序 1: Ascending; -1: Descending MyQuickSort(B, 0, Length(B)-1, -1); for I := 0 to Length(B)-1 do ListBox1.Items.Add(IntToStr(B[I])); finally B := nil; end; end; end; procedure TForm1.MyQuickSort(var arry: array of Integer; L, R: Integer; Direction: Integer); var I, J: Integer; P, T: Integer; begin //改自class.pas中的QuickSort repeat I := L; J := R; P := arry[(L R) shr 1]; repeat while Direction*(arry[I]-P) < 0 do Inc(I); while Direction*(arry[J]-P) > 0 do Dec(J); if I <= J then begin T := arry[I]; arry[I] := arry[J]; arry[J] := T; Inc(I); Dec(J); end; until I > J; if L < J then MyQuickSort(arry, L, J, Direction); L := I; until I >= R; end; end. |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
1. 我發給 jow 大大的是真心的話.
2. 如果我看到 hbl1123 再以這種方式取得他想要的東西, 我選擇沉默這也是真心話. 我想我攻擊的應該就是 hbl1123 , 因為我很早就看穿他的意圖. 至於 對 alanyuan 我第一篇確實是有挑釁, 我更希望引導他做正確發問
http://delphi.ktop.com.tw/link.asp?TOPIC_ID=75781
而這一篇也說明我的引導是有效果的 不過為了尊重這個網壇, 我會修正我的發言尺度. 謝謝 h@visli 大大 指教.
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
hbl1123
一般會員 發表:2 回覆:5 積分:1 註冊:2005-07-21 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
引言: for malanlk: 感謝你的用心良苦,但是你會語氣就一定要那樣嗎?雖然說你不是故意挑釁,可是你知道別人的感受嗎?或許我的社會經驗不夠多,所以會為了這點小事而生氣。但是,你也快年過半百了,難道,你不知道與人說話的禮貌嗎?雖然,你是想讓我有自已思考的機會,但是,請你在用詞方面要改進。不管是現在或未來,如果不改掉語氣,一定還會出現像我這種類似情形~我話說到這,在此又形成筆戰,我深抱歉。不過,還是再次感謝各位大大我並必不覺得 malanlk 說話有人身攻擊,也不過是說的一句「臉皮厚」,同時哪也是事實 要寫程式,就要自己先學好基本功,要問問題,就必需先弄清楚自己要做什麼 連自己都不清楚要做什麼,別人如何回答? 連基本功都不會,怎配成為程式人,對程式人是一種侮辱 原作者對問題敘述相當清楚,也夠簡潔,這是它的優點,但是 這樣轉成程式,會很難?不要跟我說你連宣告陣列都不會,那這樣是怎樣?來亂的?根據它的需求與清處的演算規則,只要資料結構與變數宣告一下,再將演算步驟轉成程式碼,就結束了 連這樣都做不到的人,可以建議他轉行,不要用「新手」來搪塞,因為這樣的人只有兩種 1.懶人,要別人幫他 Key in,這就叫臉皮厚,這樣稱呼算溫和的了 2.不適合從事程式寫作,連基本的將演算法轉成程式碼的能力都沒有,那還是轉行吧,坊間基本書籍那麼多,連學習都不願意嗎?不要說看不懂,有高中程度 IQ 就看得懂得書一堆 這種人就是要罵,而你出來幫他們說話,你以為是在幫他們? 事實上,你是在害他們,害他們不能反省,不能進步,永遠需要別人代寫,程度永遠那麼差,這種已經算是解答完成的問題,也可以當成問題來問 最後,你不要跳出來說話(不要出來害他們),就不會有口水戰 發表人 - syntax 於 2005/07/31 20:24:07 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |