排序就是将一个数据元素或者记录的序列重新排列成一个按关键字有序的操作。常见的排序有八种:插入排序,希尔排序,选择排序,堆排序,,冒泡排序,快速排序,归并排序,基数排序。本系列博客将对上面八种排序的原理与实现做详细介绍。

1 .插入排序

  原理:将一个记录或者数据元素插入到已经有序的序列中,得到一个长度增加1的有序序列。假设现在有一个无序整形数组a[10],现在要将数组中的10个整数排序。插入排序的做法是:a[0]有序,将a[1]插入得到一个有序的子序列a[0,1],然后将a[2]插入到子序列a[0,1]中得到a[0,1,2]有序子序列······最后a[9]插入到a[0,1,.....8]中得到a[0,1.....9]有序,最后实现了数组中10个数的排序。

int  insertsort(int a[], int N)//对长度为N的数组a排序
{
    int temp,j,i;
   if(N<0)
        return 0;
    for(i=1;i<N;i++)
    {
        temp=a[i];
        for(j=i;a[j-1]>temp&&j>0;j--)//寻找插入位置的同时进行移位
        {
            a[j]=a[j-1];
        }    
        a[j]=temp;
    }
    return 1;
}

 

2.冒泡排序

  原理:重复遍历序列的比较相邻的两个数据元素,如果它们顺序错误就将它们交换位置,一次遍历就可以将最大或最小的移动到序列末尾了多次遍历直到没有交换就说明序列已经有序了,排序完成。

int BubbleSort(int a[] ,int N)
{
    int i,j;
    int flag=1,temp;
    if(N<0)
        return 0;
    for(i=0;i<N-1&&flag;i++)//flag:是否有过比较,flag=0说明已经有序直接退出循环
    {   flag=0;
        for(j=0;j<N-i-1;j++)
        {   
            if(a[j]>a[j+1])
            {
                flag=1;  
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    return 1;
}