冒泡排序
冒泡排序是排序算法中比较基础的一种排序,主要思想是:每次比较相邻两个数的大小,例如a[0]和a[1]比较,若a[0]>a[1],则交换,依次向后比较,一轮下来,最大的交换到最后面,之后每轮比较出大的放到后面。
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
//冒泡排序
void BubbleSort(int a[],int nlength)
{
int i,j,mark=0;
if(a == NULL||nlength <= 0) return ;
for(i=0;i<nlength;i++)
{
mark = 0;
for(j=0;j<nlength-i-1;j++) //优化1
{
if(a[j]>a[j+1]) //相邻元素进行比较
{
//不用中间变量实现两个类型相同的变量的交换
a[j]^=a[j+1];
a[j+1]^=a[j];
a[j]^=a[j+1];
mark=j+1; //标记最大交换位置
}
}
if(mark==0) break;
i=nlength-1-mark; //减少整体执行次数---优化2
}
}
int main()
{
int i;
int a[]={1,3,2,5,8,6,7,9};
int n=sizeof(a)/sizeof(a[0]);
BubbleSort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
system("pause");
return 0;
}