冒泡排序 (n2 稳定)
重复走访要排序的数列,一次比较两个元素,如果顺序错误就交换过来。
#include<stdio.h>
void bubble_sort(int a[],int len)
{
int i,j,temp;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
int main()
{
int a[]={22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
int len=(int)sizeof(a)/sizeof(*a);
bubble_sort(a,len);
for(int i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
快速排序 (n*log2n 不稳定)
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
void quicksort(int a[],int low,int high)
{
int middle;
if(low>=high) return;
middle=split(a,low,high);
quicksort(a,low,middle-1);
quicksort(a,middle+1,high);
}
int split(int a[],int low,int high)
{
int part_element=a[low]; //分割元素
for(;;){
while(low<high&&part_element<=a[high])
high--;
if(low>=high) break;
a[low++]=a[high];
while(low<high&&a[low]<=part_element)
low++;
if(low>=high) break;
a[high--]=a[low];
}
a[high]=part_element;
return high;
}