冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。算法:
C语言
基础结构
*/
void bubble_sort(int *x,int n)
{
int j,k,h,t;
for (h=n-1,h=k; h>0; h--) /*循环到没有比较范围*/
{
for (j=0,k=0; j
*(x+j+1)) /*大的放在后面,小的放到前面*/
{
t = *(x+j);
*(x+j) = *(x+j+1);
*(x+j+1) = t; /*完成交换*/
k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
}
}
}
}
程序1:
void bubble_sort(int array[],int n)
{
int i,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
main()
{
long a,x,k,i[100],s;
char ch;
for(a=0;;a++)
{
printf("输入一个数,输完一个数按回车,最后一个数末尾要加n:");
scanf("%ld%c",&i[a],&ch);
if(a==99)
{
printf("注意!输入的数超过100个");
break;
}
else if(ch=='n')
break;
}
do{
x=0;
for(k=0;ki[k+1])
{
s=i[k+1];i[k+1]=i[k];
i[k]=s;x++;
}
}
}while(x!=0);
printf("从小到大排列为:");
for(k=0;k
#define LEN 9
using namespace std;
int main()
{
int nArray[LEN];
for(int i=0;i0;m--)
{
int temp;
for(int n=0;nnArray[n+1])
{
temp=nArray[n];
nArray[n]=nArray[n+1];
nArray[n+1]=temp;
}
}
}
cout<<"排序结果:"< i ; j--) {
if (a[j] < a[j - 1]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
}
}
}
C#
static void Main(string[] args)
{
int[] array = { 23,45,16,7,42 };
int length = array.Length - 1;
bool isExchanged = false;
for (int i = 0; i < length; i++)
{
isExchanged = false;
for (int j = length; j > i; j--)
{
if (array[j] > array[j - 1])
{
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
isExchanged = true;
}
}
if (!isExchanged)//一遍比较过后如果没有进行交换则退出循环
break;
}
foreach (int i in array)
{
Console.WriteLine(i);
}
Console.Read();
}
PL/SQL代码
declare
type varr_type is varray(10) of integer;
varr varr_type:=varr_type(65,32,44,78,20,13,28,99,0,1);
i integer;
j integer;
t integer;
begin
for i in reverse 1..10 loop --保证最大的那个值在最终的位置上
for j in 1..i-1 loop
if varr(j)>varr(j+1) then
t:=varr(j);
varr(j):=varr(j+1);
varr(j+1):=t;
end if;
end loop;
end loop;
for i in 1..10 loop
dbms_output.put_line(varr(i));
end loop;
end;
String[] array = { "1 ", "22.7 ", "13.5 ", "35 ", "78 ", "95 "};
List list = new ArrayList();
for (int i = 0, arrayLength = array.length; i < arrayLength; i++)
list.add(array[i]);
Collections.sort(list);//升序
Collections.sort(list, Collections.reverseOrder());//降序
for (int i = 0, size = list.size(); i < size; i++)
System.out.println(list.get(i));
冒泡排序:对数组进行排序:
void sort(int[] array)throws Exception{
if(array==null||array.length() <=1)
return;
for(int i=0,k=array.length();i array[i+1]){
int t=array[i];
array[i]=array[i+1];
array[j+1]=t;
k=j;
}
}
}
这个冒泡排序算法效率高些。