冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^ 2).
void Swap( int * a, int * b)
{
int temp;
temp = * a;
* a = * b;
* b = temp;
}
// 冒泡排序
void BubbleSort( int array[], int length)
{
// 记录一次遍历中是否有元素的交换
bool exchange;
for ( int i = 0 ; i < length; ++ i)
{
exchange = false ;
for ( int j = i + 1 ; j < length; ++ j)
{
if (array[j] < array[i])
{
exchange = true ;
Swap( & array[j], & array[i]);
}
}
// 如果这次遍历没有元素的交换,那么排序结束
if ( false == exchange)
break ;
}
}
从后往前版本
#include <stdio.h>;
void bubble_sort(int arr[],int count);
void bubble_sort(int arr[],int count)
{
int i;int j;int temp;
for(i=0;i<count;i++)
{
for(j=count-1;j>i;j--)
{
if(arr[j]<arr[j-1])
{
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
}
int main(void)
{
int arr[]={1,5,2,4,3,8,6,7,9};
int count=sizeof(arr)/sizeof(int);
bubble_sort(arr,count);
int k;
for(k=0;k<count;k++)
{
printf("%d",arr[k]);
}
return 0;
}
PHP版本
<?php
$arr=array(1,5,2,4,3,8,6,7,9);
print "排序前 ";
print_r($arr);
echo "<br>";
$arr=bubble_sort($arr);
print "排序后 ";
print_r($arr);
function bubble_sort($array)
{
$count = count($array);
$bool=true;$k=0;
for($i=0;$i<$count;$i++)
{
for($j=$count-1;$j>$i;$j--)
{
if($array[$j]<$array[$j-1])
{
$temp=$array[$j];
$array[$j]=$array[$j-1];
$array[$j-1]=$temp;
$bool=false;
$k++;
}
}
if($bool==true)
{
break;
}
}
echo "一共用了".$k."次<br>";
return $array;
}
?>