1、冒泡:两两“相邻”之间元素进行比较,交换位置 (交换排序)
void bubble_sort(int* a,int len)
{
int i,j,tmp;
for(i=0;i<len-1;i++)//次数,前n-1次确定后,最后一次也确定
{
for(j=0;j<len-i-1;j++)//每次少排一个!!!
{
if(a[j]>a[j+1])//节约空间时,可不借助中间变量交换
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}
2、选择排序:每次从未排序中选择最值,依次存放 (交换排序)
void select_sort(int* a,int len)
{
int i,j,listen;
for(i=0;i<len-1;i++)
{
listen=i;
for(j=i+1;j<len;j++)
{
if(a[j]<a[listen])
listen=j;
}
if(i!=listen)
{
a[listen]+=a[i];
a[i]=a[listen]-a[i];
a[listen]-=a[i];
}
}
}
3、插入排序:依次从未排序中取出一个值,插入到已序中。
void insert_sort(int* a,int len)
{
int i,j,tmp;
for(i=1;i<len;i++)
{
if(a[i]<a[i-1])//找出第一个未排序元素
{
tmp=a[i];//记录要比较的值
j=i;
while(j>0 && a[j-1]>tmp)
{
a[j]=a[j-1];
j--;
}
a[j]=tmp;
}
}
}
4、快速排序分而治之
void quick_sort(int* a,int left,int right)
{
int i,j,sz,tmp;
i=left;
j=right;
sz=a[left];
if(left>right)
return;
while(left<right)
{
while(a[i]<=a[left] && i!=right)
i++;
while(a[j]>a[left] && j!=left)
j--;
if(i<j)
{
a[i]+=a[j];
a[j]=a[i]-a[j];
a[i]-=a[j];
}
else
{
tmp=a[j];
a[j]=a[left];
a[left]=tmp;
break;
}
}
quick_sort(a,left,j-1);
quick_sort(a,j+1,right);
}