1樓:
氣泡排序的優點是特別具有穩定性:
下列程式的作用:
1.輸入乙個數n
2.輸入n個數。
3.由大到小輸出這n個數。
注:0100000
varn,i,j,temp:integer;
a:array[1..100000] of integer;
beginreadln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]begintemp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;for i:=1 to n do write(a[i],'
writeln;
end.此程式可直接在pascal編譯器上或可執行檔案裡使用。
樓下的:我想問問你,你把氣泡排序寫這麼長,不怕比賽時超時啊?選擇排序需要用集合,不會直接使用陣列,你的老師沒用教你嗎?
2樓:網友
呵呵 似乎只有樓上比較懂啊 我也來乙個。
在資料夾內建乙個 文字文件 在裡面輸入要排序的數列 在執行程式 呵呵。
program maopao(fin,fout);
vari,j,m:integer;
a:array [1..10] of integer;
fin,fout:text;
beginassign(fin,'');
assign(fout,'');
reset(fin);
rewrite(fout);
for i:=1 to 10 do
read(fin,a[i]);
for i:=1 to 9 do
for j:=(i+1) to 10 doif (a[i]>=a[j]) then
begina[m]:=a[i];
a[i]:=a[j];
a[j]:=a[m];
end ;for i:=1 to 10 dobegin
write (fout,a[i]);
write(fout,'
end;close(fin);
close(fout);
end.
pascal氣泡排序
3樓:網友
1樓寫的冒泡沒問題,選擇有些問題,我等會更正。2樓的說法就有問題,顯然冒泡和選擇排序都為穩定排序,你何來選擇不穩定之說?快速排序才是不穩定排序。但是二樓的兩種排序都對。
冒泡:for i:=1 to n-1 do
for j=i+1 to n do
if a[i]>a[j]then begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;選擇:for i:=1 to n-1 do
beginmin:=99999;
for j:=i+1 to n do
if min>a[j]then
beginmin:=a[j];
min_j:=j;
end;a[min_j]:=a[i];
a[i]:=min;
end;實際上還有更好的方法,一下是我寫的排序,比他們的快一些,因為交換次數少。
以陣列a儲存待排序元素,n為元素總個數,i,j,k,tmp為變數。
for i:=1 to n-1 do
begink:=i
for j:=i+1 to n do if a[k]>a[j] then k:=j;
tmp:=a[i];
a[i]:=a[k];
a[k]:=tmp;
end;這個你可以理解為冒泡,也可以理解為選擇,總而言之相比於冒泡和選擇快就是了。
4樓:網友
錯了,判斷放在迴圈裡面。
pascal氣泡排序和選擇排序 **
5樓:網友
樓上寫的有點問題。氣泡排序每次比較相鄰的兩個數,而選擇排序每次把乙個數與之後的每個數相比較。氣泡排序是穩定的,而選擇排序是不穩定的。
氣泡排序:for i:=1 to n-1 do for j:=n downto i+1 do if s[j]s[j] then
begintemp:=s[i];
s[i]:=s[j];
s[j]:=temp;
end;
pascal氣泡排序查錯
6樓:網友
for i:=1 to n do
beginfor j:=i to n doif (a[j]>a[j+1]) thenbegink:=a[j];
a[i]:=a[j+1];
a[j+1]:=k;
end;end;
這段改成這樣的試試。
7樓:網友
把 for i:=1 to n do 改成 for i:=1 to n-1 do
把 for j:=1 to n do 改成 for j:=1 to n-i do
然後 將。if (a[i]>a[i+1]) thenbegink:=a[i];
a[i]:=a[i+1];
a[i+1]:=k;
這裡面的 變數 i 全部改成 j 例如 a[i] 變成 a[j]
8樓:
主要是排序部分出問題了。
修改後的程式:
for i:=1 to n do
beginfor j:=1 to n-1 doif (a[j]>a[j+1]) thenbegink:=a[j];
a[j]:=a[j+1];
a[j+1]:=k;
end;end;
pascal 氣泡排序 給我乙個完整**
9樓:網友
例:輸入序列資料按非減順序輸出。
程式1:program mppx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
beginwrite('enter date:');
for i:= 1 to n do read(a[i]);
for i:=1 to n -1 do
for j:=n downto i+1 doif a[j-1]0 do
beginj:=k-1;k:=0;
for i:=1 to j do
if a[i]>a[i+1] then
begin t:=a[i];a[i]:=a[i+1];a[i+1]:=t;k:=i;end;
end;write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.
10樓:網友
var a:array[1..1000]of longint;
tmp,n,i,j:integer;
beginreadln(n);
for i:=1 to n do
read(a[i]);//讀入n個數。
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j]then begintmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
end;//從小到大排序 比較交換。
for i:=1 to n do
write(a[i],' ');
end.
11樓:網友
const n=10;
var a:array [0..n] of integer; i,j,x:integer;
beginfor i:=1 to n do read(a[i]);
for i:=1 to n-1 do
for j:=i to n do
if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end;
for i:=1 to n do write(a[i],' ');
end.手機碼字不容易啊。
pascal 氣泡排序 幫忙找錯
12樓:網友
if (a[i]改成if (a[i]..也就是說, 不要另外加乙個change函式。我不懂pascal語法。 但大概就是這麼寫的吧。
注意不要另外加change函式。 直接在主程式 裡change.
要兩個readln我想應該是你前面輸入資料的最後輸入了乙個"回車"
第乙個readln讀取了回車。 所以要兩個readln
13樓:王八肝
1、if (a[i]改成if (a[i]2、因為你用了2個程式體,所以要兩個等待回車(readln)
14樓:嘯嘯_飛
不需要改那麼多,只需要把子程式裡面的最前面加乙個var就好了,這樣就會變成變數形參,子程式結束時改變實在引數的值,否則不會改變(就像你那個),也就出現了你那種輸入啥輸出啥的情況,至於第二問,參照ls
資料結構C語言氣泡排序問題
修改 for j n 1 j i j e69da5e887aa62616964757a686964616f31333330343162 if r j 1 key key 瞭解一下氣泡排序 bubblesort 的基本概念 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個...
用氣泡排序法將陣列a 101,3,2,5,6,7,4,9,10,8中的數進行從大到小進行排列,並輸出排好的陣列a
include int main i,j,t for i 1 i 9 i for j 0 j 9 j if a j for i 0 i 10 i printf d n a i return 0 include void main for i 0 i 9 i for i 0 i 10 i printf...
求pascal快速排序的程式,求pascal快速排序的程式一個。
var a array 1.100 of integer i,n integer procedure pop l,r integer var p1,p2,x,t integer begin p1 l p2 r x a l r div 2 repeat while a p1 x do inc p1 w...