冒泡排序法Word文件下载.docx
《冒泡排序法Word文件下载.docx》由会员分享,可在线阅读,更多相关《冒泡排序法Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
array[j-1]){
//小的总是往前排
bubble=array[j]
array[j]=array[j-1];
array[j-1]=bubble;
}
io.print("
----------------"
)
冒泡排序(交换类换排序)"
array={2;
46;
5;
17;
1;
2;
3;
99;
12;
56;
66;
21};
bubble_sort(array,1,#array)
//输出结果
for(i=1;
#array;
1){
io.print(array[i])
C语言
基础结构
*/
voidbubble_sort(int*x,intn)
{
intj,k,h,t;
for(h=n-1,h=k;
h>
0;
h--)/*循环到没有比较范围*/
for(j=0,k=0;
j<
h;
j++)/*每次预置k=0,循环扫描后更新k*/
if(*(x+j)>
*(x+j+1))/*大的放在后面,小的放到前面*/
t=*(x+j);
*(x+j)=*(x+j+1);
*(x+j+1)=t;
/*完成交换*/
k=j;
/*保存最后下沉的位置。
这样k后面的都是排序排好了的。
*/
程序1:
voidbubble_sort(intarray[],intn)
inti,j,flag,temp;
for(i=0;
i<
n-1;
i++)
flag=1;
for(j=0;
j<
n-i-1;
j++)
if(array[j]>
array[j+1])
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=0;
if(1==flag)
printf("
%d"
i);
//首先打印出,在第几层循环时顺序已排好
break;
//跳出循环
return;
程序2:
(可进行2个数以上大小比较,程序参考作者:
赵杰)
#include<
STDIO.H>
main()
longa,x,k,i[100],s;
charch;
for(a=0;
;
a++)
输入一个数,输完一个数按回车,最后一个数末尾要加n:
"
);
scanf("
%ld%c"
&
i[a],&
ch);
if(a==99)
注意!
输入的数超过100个"
elseif(ch=='
n'
do{
x=0;
for(k=0;
k<
a;
k++)
if(i[k]>
i[k+1])
s=i[k+1];
i[k+1]=i[k];
i[k]=s;
x++;
}while(x!
=0);
从小到大排列为:
%ld<
i[k]);
%ld"
i[a]);
C++
#include<
iostream>
#defineLEN9
usingnamespacestd;
intmain()
intnArray[LEN];
for(inti=0;
i<
LEN;
i++)
nArray[i]=LEN-i;
//赋初值
cout<
<
原始数据为:
endl;
for(intj=0;
j<
j++)
nArray[j]<
"
for(intm=LEN-1;
m>
m--)
inttemp;
for(intn=0;
n<
m;
n++)
if(nArray[n]>
nArray[n+1])
temp=nArray[n];
nArray[n]=nArray[n+1];
nArray[n+1]=temp;
排序结果:
for(i=0;
nArray[i]<
return0;
PHP
代码1:
<
?
php
//冒泡排序(一维数组)
functionbubble_sort($array)
$count=count($array);
if($count<
=0)returnfalse;
for($i=0;
$i<
$count;
$i++)
for($j=$count-1;
$j>
$i;
$j--)
if($array[$j]<
$array[$j-1])
$tmp=$array[$j];
$array[$j]=$array[$j-1];
$array[$j-1]=$tmp;
return$array;
//使用实例
$_array=array('
5'
'
8'
6'
9'
3'
2'
4'
$_array=bubble_sort($_array);
print($_array);
>
代码2:
//冒泡排序
functionmaopaosort($arr)
for($i=0;
$i<
count($arr)-1;
$i++){
for($j=0;
$j<
count($arr)-1-$i;
$j++){
if($arr[$j]>
$arr[$j+1])
//交换赋值,不使用中间变量
$arr[$j]=$arr[$j+1]+$arr[$j];
$arr[$j+1]=$arr[$j]-$arr[$j+1];
$arr[$j]=$arr[$j]-$arr[$j+1];
return$arr;
}//endfunc
//实例
$arr=array(7,3,6,1,5,2,11,4,44,33,22,88,44);
print_r(maopaosort($arr));
//结果输出Array([0]=>
1[1]=>
2[2]=>
3[3]=>
4[4]=>
5[5]=>
6[6]=>
7[7]=>
11[8]=>
22[9]=>
33[10]=>
44[11]=>
44[12]=>
88)
Ruby
defbubble(arr)
(arr.length-1).downto
(1)do|j|
a1=arr.dup
j.timesdo|i|
ifarr>
arr[i+1]
arr,arr[i+1]=arr[i+1],arr
breakifa1==arr
arr
Java
publicclassBubblesort{
staticvoidbubblesort(int[]a){
for(inti=0;
a.length;
i++){
for(intj=a.length-1;
j>
i;
j--){
if(a[j]<
a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
VisualBasic
PrivateSubForm_Load()
Dima,cAsVariant
DimiAsInteger,jAsInteger,tempAsInteger,bSwapAsBoolean
a=Array(17,45,12,80,50)
Forj=0ToUBound(a)-1
bSwap=False
Fori=0ToUBound(a)-1
If(a(i)>
a(i+1))Then'
若是递减,改为a(i)<
a(i+1)
temp=a(i)
a(i)=a(i+1)
a(i+1)=temp
bSwap=True
EndIf
Next
IfbSwap=FalseThen
ExitFor
ForEachcIna
Debug.Printc;
EndSub
Pascal
programbubble_sort;
var
a:
array[1..N]of1..MAX;
temp,i,j:
integer;
randomize;
fori:
=1toNdoa:
=1+random(MAX);
writeln('
Arraybeforesorted:
'
=1toNdowrite(a,'
'
writeln;
=N-1downto1do
forj:
=1toido
ifa[j]<
a[j+1]then
temp:
=a[j];
a[j]:
=a[j+1];
a[j+1]:
=temp;
Arraysorted:
Endsorted.'
readln;
end.
C#
staticvoidMain(string[]args)
int[]array={23,45,16,7,42};
intlength=array.Length-1;
boolisExchanged=false;
length;
isExchanged=false;
for(intj=length;
i;
j--)
if(array[j]>
array[j-1])
inttemp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
isExchanged=true;
if(!
isExchanged)//一遍比较过后如果没有进行交换则退出循环
foreach(intiinarray)
Console.WriteLine(i);
Console.Read();
Python
#BubbleSortusedpython3.1orpython2.x
defbubble(str):
tmplist=list(str)
count=len(tmplist)
foriinrange(0,count-1):
forjinrange(0,count-1):
iftmplist[j]>
tmplist[j+1]:
tmplist[j],tmplist[j+1]=tmplist[j+1],tmplist[j]
returntmplist
#useage:
str="
zbac"
print(bubble(str))#['
a'
b'
c'
z'
]
number=[16,134,15,1]
print(bubble(number))#[1,15,16,134]
JS
function(array){
varlength=array.length,temp;
for(vari=0;
length-2;
i++){
for(varj=length-1;
=1;
j--){
if(array[j]<
array[j-1]){
temp=array[j];
returnarray;
ActionScript
vararr:
Array=newArray(88,0,4,22,89,0,8,15);
vartemp:
int=0;
for(vari:
arr.length;
i++){
for(varj:
arr.length-i;
j++){
if(arr[j]>
arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
for(vart:
t<
t++){
trace(arr[t]);
伪代码
BUBBLESORT(A)
fori<
-1tolength[A]
doforj<
-length[A]downtoi+1
doifA[j]<
A[j-1]
thenexchangeA[j]<
->
A[j-1]
PL/SQL代码
declare
typevarr_typeisvarray(10)ofinteger;
varrvarr_type:
=varr_type(65,32,44,78,20,13,28,99,0,1);
iinteger;
jinteger;
tinteger;
foriinreverse1..10loop--保证最大的那个值在最终的位置上
forjin1..i-1loop
ifvarr(j)>
varr(j+1)then
t:
=varr(j);
varr(j):
=varr(j+1);
varr(j+1):
=t;
endif;
endloop;
foriin1..10loop
dbms_output.put_line(varr(i));
REALBasic
DimiAsInteger,jAsInteger,tempAsInteger
Forj=0ToUBound(a)-1
Fori=0ToUBound(a)-1
If(a(j)>
a(i))Then
temp=a(j)
a(j)=a(i)
a(i)=temp
EndIf
Next
Fori=0toUBound(a)
msgboxstr(a(i))
变种算法
一个叫做鸡尾酒排序(也称双向冒泡排序)的算法,和冒泡排序的“编程复杂度”一样,但对随机序列排序性能稍高于普通冒泡排序,但是因为是双向冒泡,每次循环都双向检查,极端环境下会出现额外的比较,导致算法性能的退化,比如“4、5、7、1、2、3”这个序列就会出现退化
扩展阅读:
∙1
http:
//ruby-
∙2
//JS版本常见排序算法
∙3
[1]黄福员,聂瑞华。
冒泡排序算法的改进[J].微机发展,2003,13(11)_3.
∙4
[1