pascal氣泡排序查錯

2025-01-05 04:15:23 字數 5427 閱讀 3036

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 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。氣泡排序最核心的思想就是相鄰的兩個元素相比較,符合冒泡的才冒...