首页 > 编程语言 > 详细

常用排序算法总结

时间:2015-03-31 00:22:31      阅读:261      评论:0      收藏:0      [点我收藏+]

冒泡排序

时间复杂度:O(N2)

 

原理:从数组的第个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,直到数组结束。

void Bubble(int array[], int size)
{
    int i,j;

    for(i=0; i<size; i++)
    {
        for(j=i+1; j<size; j++)
        {
            if(array[i]>array[j])
            {
                array[i]=array[i]^array[j];
                array[j]=array[i]^array[j];
                array[i]=array[j]^array[i];
            }
        }
    }

 

二、选择排序

时间复杂度:O(N^2),与冒泡排序相比减少了数组交换的次数

 

原理:选择个 array[0]作为标杆,然后循环找到除这个外最小的 (查找小于标杆的最小 ),交换这两个,这时最小就被放到了array[0]上,然后再将array[1]作为标杆,从剩下未排序的 中找到最小 ,并交换。

void Sort(int array[], int size)
{
    int i,j,k;

    for(i=0; i<size; i++)
    {
        k=i;
        for(j=i+1; j<size; j++)
        {
            if(array[j]<array[k])
            {
                k=j;
            }
        }

        if(i!=k)
        {
            array[i]=array[i]^array[k];
            array[k]=array[k]^array[i];
            array[i]=array[i]^array[k];
        }
    }
}

 

三、插入排序

时间复杂度:插入排序对随即顺序的序列的时间复杂度也为O(N^2),但是对于基本有序的序列进行排序时间复杂度为O(N)

 

原理:插入排序的思想是数组是部门有序的,然后将无序的部分循环插入到已有序的序列中。

void InsertSort(int array[], int size)
{
    int i,j,temp;

    for(i=2; i<size; i++)
    {
        temp=array[i];

        for(j=i-1; j>=0 && array[j]>temp; j--)
        {
            array[j+1]=array[j];
        }

        array[j+1]=temp;
    }

}

常用排序算法总结

原文:http://www.cnblogs.com/274914765qq/p/4379409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!