发布网友 发布时间:2022-04-24 11:18
共3个回答
热心网友 时间:2023-10-11 00:03
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
begin
min:=99999;
for j:=i+1 to n do
if min>a[j]then
begin
min:=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
begin
k:=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;
这个你可以理解为冒泡,也可以理解为选择,总而言之相比于冒泡和选择快就是了。
热心网友 时间:2023-10-11 00:04
已改好,请检查
var i,j,t,n:longint;
a:array[1..100]of longint;
bj:boolean;
begin
read(n);
for i:=1to n do read(a[i]);
for i:=1to n-1do
begin
bj:=false;
for j:=1to n-i do
begin
if a[j]>a[j+1]then
begin
bj:=true;
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;
end;
if not bj then break;
end;
for i:=1 to n do
write(a[i],' ');
end.
热心网友 时间:2023-10-11 00:04
错了,判断放在循环里面。