-
o(n2):
選擇“排序”。 插入排序。 冒泡分揀。
這個時間的複雜性被遺忘了。 它似乎是 o(n
外殼排序。
時間複雜度 o(nlgn)。
合併排序。 快速排序。
堆排序。 平衡二叉樹排序。
計數排序。 基數排序。
-
1.快速排序。
procedure qsort(l,r:integer);
var i,j,mid:integer;
begini:=l;j:=r; mid:=a[(l+r) div 2];
repeat
while amid do dec(j);
if i<=j then begin
swap(a,a[j]);
inc(i);dec(j);
end;until i>j;
if la[j] then swap(a,a[j]);
end;d.冒泡分揀。
procedure bubble_sort;
var i,j,k:integer;
beginfor i:=1 to n-1 do
for j:=n downto i+1 doif a[j]r) or (a<=a[j]))then begin
tmp[t]:=a; inc(i);
endelse begin
tmp[t]:=a[j];inc(j);
end;inc(t);
end;for i:=p to r do a:=tmp;
end;procedure merge_sort(var a:listtype; p,r: integer);
var q:integer;
beginif p<>r then begin
q:=(p+r-1) div 2;
merge_sort (a,p,q);
merge_sort (a,q+1,r);
merge (a,p,q,r);
end;end;
beginmerge_sort(a,1,n);
end.g.基數排序。
想法:將每個元素從低到高排序一次。
-
1.沒有嚴格的順序。 但我建議按照你寫的順序發表宣告,這是很好的做法。 應盡可能避免使用高階語言的標籤。
2. 在較高版本的 Pascal 中,一般 uses 放在第一位,label、const、type、var、procedure 和 function 的順序可以互換。 但是,如果宣告引用了前面的權利要求,則必須在以後放置。
3.鍊表還有乙個特例:
typepnode = ^tnode;
tnode = record
data: integer;
next: pnode;
end;由於 pnode 和 tnode 之間的迴圈引用,pascal 需要專門處理。 在這種情況下,必須首先宣告 pnode 指標,然後宣告 tnode 記錄。
樓主,你應該說,你的方案在實施的時候,“第乙個數字大於第二個數字按公升序排列時必須滿足第乙個數字,排序排列時第乙個數字必須小,第二個數字必須滿足,否則會有錯誤”,不要說人們在氣泡排序時會有這樣的漏洞。 氣泡排序的思路:比較兩個相鄰的,並根據排序要求將它們移置(公升序和降序顛倒)。 >>>More