在排序算法中,是快速排序好还是冒泡排序好??

这是基于pascal复赛操作中而言,知道的请回答,万分感谢!!

不,应该相对而言,最快的往往是最不稳定的
给你看看下面的各种排序
二叉树排序
program pxtree;
const
a:array[1..8] of integer=(10,18,3,8,12,2,7,3);
type point=^nod;
nod=record
w:integer;
right,left:point ;
end;
var root,first:point;k:boolean;i:integer;
procedure hyt(d:integer;var p:point);
begin
if p=nil then
begin
new(p);
with p^ do begin w:=d;right:=nil;left:=nil end;
if k then begin root:=p; k:=false end;
end
else with p^ do if d>=w then hyt(d,right) else hyt(d,left);
end;
procedure hyt1(p:point);
begin
with p^ do
begin
if left<>nil then hyt1(left);
write(w:4);
if right<>nil then hyt1(right);
end
end;
begin
first:=nil;k:=true;
for i:=1 to 8 do hyt(a[i],first);
hyt1(root);writeln;
end.

我自己做的排序

var a,b,c:array [1..1000] of longint;
i,j,t,x,n:longint;
begin
read(n);
j:=n;
for i:=1 to n do
read(a[i]);
i:=0;
repeat
inc(i);
dec(j);
if a[i]<=a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
until i=j;
for i:=1 to n do
write(a[i],' ');
end.

气泡排序 (不是冒泡)

procedure Bubblesort (var R:filetype);
begin
for i:=1 to n-1 do
noswap:=true;
for j:=n-1 downto i do
if R[j+1].key < R[j].key then
temp :=R[j+1];
R[j+1]:=R[j];
R[j]:=temp;
noswap:=false
endif
endfor;
if noswap then
return;
endif
endfor
end;
procedure selectsort (var R:filetype);
begin
for i:=1 to n-1 do
k:=i;
for j:=i+1 to n do
if R[j].key < R[k].key then
k:=j
endif
endfor;
if k<>i then
temp:R[i];
R[i]:=R[k];
R[k]:=temp
endif
endfor
end;
主程序自己加吧

冒泡
type element=array[0..10001]of integer;
var arrhead,arrend:longint;
n,i:longint;
a:element;

procedure merge(var a:element;x,y,z:longint);
var temp1,temp2:element;
lengthA,lengthB,i,j,count:longint;

begin
for i:=x to y do temp1[i-x+1]:=a[i];
for j:=y+1 to z do temp2[j-y]:=a[j];
lengthA:=y-x+1;
lengthB:=z-y;
i:=1; j:=1; count:=x-1;
while (i<=lengthA)and(j<=lengthB) do
begin
inc(count);
if temp1[i]>temp2[j] then begin a[count]:=temp2[j]; inc(j); end
else begin a[count]:=temp1[i]; inc(i); end;

end;
if i>lengthA then for i:=j to lengthB do a[count+i-j+1]:=temp2[i]
else for j:=i to lengthA do a[count+j-i+1]:=temp1[j];
end;

procedure sort(var a:element;x,y:longint);
var mid:longint;
begin
mid:=(x+y) div 2;
if mid<>x then sort(a,x,mid);
if mid+1<>y then sort(a,mid+1,y);
merge(a,x,mid,y);
end;

begin
read(n);
for i:=1 to n do read(a[i]);
arrhead:=1;
arrend:=n;
sort(a,arrhead,arrend);
for i:=1 to n do begin write(a[i],' '); if i mod 5=0 then writeln; end;
end.

并归排序

type element=array[0..10001]of integer;
var arrhead,arrend:longint;
n,i:longint;
a:element;

procedure merge(var a:element;x,y,z:longint);
var temp1,temp2:element;
lengthA,lengthB,i,j,count:longint;

begin
for i:=x to y do temp1[i-x+1]:=a[i];
for j:=y+1 to z do temp2[j-y]:=a[j];
lengthA:=y-x+1;
lengthB:=z-y;
i:=1; j:=1; count:=x-1;
while (i<=lengthA)and(j<=lengthB) do
begin
inc(count);
if temp1[i]>temp2[j] then begin a[count]:=temp2[j]; inc(j); end
else begin a[count]:=temp1[i]; inc(i); end;

end;
if i>lengthA then for i:=j to lengthB do a[count+i-j+1]:=temp2[i]
else for j:=i to lengthA do a[count+j-i+1]:=temp1[j];
end;

procedure sort(var a:element;x,y:longint);
var mid:longint;
begin
mid:=(x+y) div 2;
if mid<>x then sort(a,x,mid);
if mid+1<>y then sort(a,mid+1,y);
merge(a,x,mid,y);
end;

begin
read(n);
for i:=1 to n do read(a[i]);
arrhead:=1;
arrend:=n;
sort(a,arrhead,arrend);
for i:=1 to n do begin write(a[i],' '); if i mod 5=0 then writeln; end;
end.

插入排序

const max=100;
type arr=array[0..max]of integer;
var a:arr;
i,n:integer;
fin:text;
procedure InsSort(var r:arr; rn:integer);
var i,j:integer;
begin
for i:=2 to rn do
begin
r[0]:=r[i];
j:=i-1;
while(r[0]<r[j]) do
begin
r[j+1]:=r[j];
dec(j);
end;
r[j+1]:=r[0];
end;
end;

begin
assign(fin,'input.txt');
reset(fin);
readln(fin,n);
for i:=1 to n do read(fin,a[i]);
write('before sort:');
for i:=1 to n do write(a[i]:5); writeln;
InsSort(a,n);
write('after sort: ');
for i:=1 to n do write(a[i]:5); writeln;
close(fin);
readln;
end.

堆排
const maxn=1000;
var a:array[1..maxn] of longint;
size:longint;
i,n:longint;
procedure swap(var a,b:longint);
var t:longint;
begin
t:=a;
a:=b;
b:=t;
end;
procedure insert(x:longint);
var p:longint;
begin
inc(size);
p:=size;
while (a[p div 2]>x) and (p>1) do begin
a[p]:=a[p div 2];
p:=p div 2;
end;
a[p]:=x;
end;
procedure heapfy(idx:longint);
var l,r,low:longint;
begin
l:=2*idx;
r:=2*idx+1;
if (a[l]<a[idx]) and (l<=size) then low:=l
else low:=idx;
if (a[r]<a[low]) and (r<=size) then low:=r;
if idx<>low then begin
swap(a[idx],a[low]);
heapfy(low);
end;
end;
function getmin:longint;
begin
exit(a[1]);
end;
function pop:longint;
begin
pop:=a[1];
a[1]:=a[size];
dec(size);
heapfy(1);
end;
begin
readln(n);
size:=0;
for i:=1 to n do
insert(random(100));
for i:=1 to n do
a[n-i+1]:=pop;
for i:=1 to n do
write(a[i],' ');
writeln;
end.

至于哪个速度快些就自己去试试吧

参考资料:自己

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-18
快速排序好。
快速排序、堆排序是基于比较的排序方法中最好的。还有归并排序。他们都是O(nlogn)的。
冒泡法、插入排序、选择排序都是基本排序,O(n*n)的。Shell排序做了些改进。

不是基于比较的排序方法典型的是计数排序和桶排序,O(n),能达到线性时间下界。
第2个回答  2009-11-18
当然是快速了,快速平均时间o(nlogn),冒泡平均时间o(n^2),空间都是o(1)
第3个回答  2009-11-27
冒泡的时间复杂度不管好坏情况都是O(n的平方),而插入排序在最好情况下是O(n),最坏情况是是O(n的平方)。但是平均情况下,插入排序比冒泡排序复杂度要低。

直接插入排序、快速排序、冒泡排序最坏的情况下那种排序更好
最好的当然是快排,时间复杂度只有O(nlogn);最坏事都是O(n^2);另外,对于特殊数据,冒泡可以优化到O(n);

当序列是有序和逆序是快速排序谁快
快速排序和冒泡排序都是排序算法,它们都能够对序列进行排序。当序列本身就是有序的时,冒泡排序会比快速排序更快,因为快速排序在最坏的情况下的时间复杂度是指数级别的,而冒泡排序的时间复杂度是线性的。但是,当序列是逆序的时,快速排序会比冒泡排序更快,因为它的平均时间复杂度是更小的。总的来...

在待排序的元素序列基本有序的前提下,效率最高的排序方法是( )。
【答案】:C 就平均时间性能而言,快速排序最佳,其所需时间最少,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。当序列中的记录基本有序或元素个数较少时,冒泡排序和简单选择排序为最佳排序方法。

几种排序算法的比较
插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。反而在这种情况下,快速排序反而慢了。当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。当n较大时,...

按键精灵快速排序(比冒泡更快更有效率的算法)是怎么样的?
冒泡排序为O(N^2),在排序过程中其实是效率较低的。在扫拍卖或者其他需要比拼速度的时候,时间就是金钱~越快越能抢占先机。今天我们介绍另一种更快更有效率的排序——快速排序,时间复杂度为O(n*logn)。快速排序的算法思想 快速排序采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod...

常见的排序算法—选择,冒泡,插入,快速,归并
冒泡排序是一种比较基础的排序算法,其思想是相邻的元素两两比较,较大的元素放后面,较小的元素放前面,这样一次循环下来,最大元素就会归位,若数组中元素个数为n,则经过(n-1)次后,所有元素就依次从小到大排好序了。整个过程如同气泡冒起,因此被称作冒泡排序。 选择排序代码如下: public void Bubble_sort(int[] ...

排序算法
1. 冒泡排序:这是一种简单的排序算法,它通过不断地比较和交换相邻元素来将最大值或最小值移动到序列的一端。这种算法的时间复杂度较高,适用于数据量较小的情况。2. 选择排序:选择排序的基本思想是在未排序的序列中找到最小的元素,将其存放到排序序列的起始位置。这种算法的时间复杂度也较高,...

快速排序和冒泡排序算法
快速排序算法是对冒泡算法的一种改进,大家都知道,冒泡排序是比较相邻元素的大小,而快速排序则在冒泡排序的基础上将数组分为两部分,在分别对他们进行排序,通过递归实现。冒泡排序的实现过程:快速排序的思想是在一个需要排序的数组A中首先选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有...

如何排序数组中两个数的大小?
1. 冒泡排序法:冒泡排序法是一种基础排序算法,通过比较相邻元素的大小来逐渐交换它们的位置,可以将最大或最小的元素移动到数组的末尾或开头。对于只有两个元素的数组,只需要进行一次比较和交换就可以确定它们的大小关系。2. 快速排序法:快速排序法是一种高效的排序算法,通过选取一个基准值,将数组...

...堆排序、快速排序和冒泡排序,最省时间的算法是什么?
对同一个基本有序的待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法是冒泡排序。冒泡排序的最好比较次数为n次,最差比较次数为n^2次,最差比较次数为0次,最差比较次数为n^2次,最差比较次数为1次,最差比较次数为1次。快速排序的最好比较次数为nlogn次,最差比较次数为n^2次...

相似回答