1樓:網友
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;
這段改成這樣的試試。
2樓:網友
把 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]
3樓:
主要是排序部分出問題了。
修改後的程式:
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氣泡排序法
4樓:網友
這才是真正的冒泡:
program pansy;
var a:array[1..4]of longint;i,j,t:longint;
beginfor i:=1 to 4 do read(a[i]);
for i:=1 to 3 do
for j:=1 to 4-i do
if a[j]begin
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;for i:=1 to 4 do write(a[i],' ');
end.
5樓:網友
樓主的程式是乙個不正確的選擇排序。
如果把for j:=1 to 4 do 改成 for j:=i+1 to 4 do 可實現從小到大排序。
氣泡排序程式如下。
for i:=n-1 downto 1 dofor j:=1 to i do
if a[j]begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp
end;
6樓:網友
堆排飄過。
t在哪兒定義的?
for j:=1 to 4 do改為for j:=i+1 to 4真正的冒泡:
for i:=1 to 4 do
for j:=1 to 4-i do
if a[j]>a[j+1] then
begint:=a[i];a[i]:=a[j];a[j]:=t;
end;雖然**有點像但意義完全不同。
pascal氣泡排序
7樓:網友
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;這個你可以理解為冒泡,也可以理解為選擇,總而言之相比於冒泡和選擇快就是了。
8樓:網友
錯了,判斷放在迴圈裡面。
排序 pascal 我用的氣泡排序 利用過程 **錯了?
9樓:
沒發現什麼問題。你指的錯誤是什麼?
題庫上還有很多其他的限制的,比如輸入輸出格式,時間限制等等。
我認為你的程式有可能有兩個問題:
1.輸出格式不當,嘗試將最後的write改為write(a[i],'並在最後加上writeln;
2.資料規模不適用於冒牌,冒牌的接受範圍(1s)是n<10^3左右,如果n>10^3次方,請使用nlogn和n級別排序。
另外說一句,你的程式排序部分沒有問題,交換過程使用了變參傳值,是正確的。
10樓:網友
你的過程錯了,應該交換全域性變數的值:
vari,j,n:longint;
a:array[1..1010] of longint;
procedure jiaohuan;
vart:longint;
begint:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=n-1 downto 1 dofor j:=1 to i do
if a[j]>a[j+1] then
jiaohuan;
for i:=1 to n do
write(a[i]);
end.
求pascal氣泡排序程式(全程式)
11樓:網友
設有n個數。
for i:=1 to n-1 do //進行n-1次比較for j:=1 to n-i do //i次確定i個最大值,故只需比較前n-i個數。
if a[j]>a[j+1] then //從小到大排序begin
p:=a[j];a[j]:=a[j+1];a[j+1]:=p;
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
pascal氣泡排序和選擇排序 **
15樓:網友
樓上寫的有點問題。氣泡排序每次比較相鄰的兩個數,而選擇排序每次把乙個數與之後的每個數相比較。氣泡排序是穩定的,而選擇排序是不穩定的。
氣泡排序: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 氣泡排序 給我乙個完整**
16樓:網友
例:輸入序列資料按非減順序輸出。
程式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.
17樓:網友
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.
18樓:網友
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.手機碼字不容易啊。
關於VB的氣泡排序法,急,關於C語言氣泡排序法的問題
1 這個首先是 下標越界 吧,可以dim a 5 as integer 需要注意的是 你只用了5個元素,你沒用option base 1,所以下標從0開始的。2 其次是 型別不匹配 陣列的輸出要採用如下形式 for i 1 to ubound a print a i next i 你的a陣列沒有定義...
c語言中冒泡法排序數,c語言中冒泡法排序六個數
include int main c語言隨機產生50個數輸出,排序後再輸出 include include int main for int j 1 j 20 j for int i 1 i 20 i int temp if a i a i 1 temp a i a i 在c語言中怎樣表示一個數的 ...
氣泡排序演算法有幾種寫法
氣泡排序演算法有兩種,一種是從大到小排,另一種是從小到大排。氣泡排序依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。氣泡排序最核心的思想就是相鄰的兩個元素相比較,符合冒泡的才冒...