码迷,mamicode.com
首页 > 编程语言 > 详细

基本排序算法学习

时间:2015-07-08 22:17:01      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

排序有关博客:

http://www.cnblogs.com/vamei/archive/2013/03/12/2948847.html

http://blog.csdn.net/morewindows/article/details/6665714

排序动画(推荐):http://www.sorting-algorithms.com/insertion-sort

1.插入排序

基本思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。

操作过程:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录开始逐个进行插入,直至整个序列有序。

空间复杂度O(1),时间复杂度O(n2)(取决于原先序列排序情况,最小n-1,最大(n+4)(n-1)/2)

void InsertSort( int a[], int n)
{
    //假设序列a[i]为已经排好序(从小到大);
    //在后面的序列a[i+1]--a[n-1]中的每个元素与a[i]比较,如果比a[i]小,则交换位置。
    //直到所有的元素都已经交换过位置
    int i = 0,j = 0;
    int temp; 
    for( i = 1; i < n; i++) //从序列中的第二个元素开始(假定第一个元素为已经排好序的子序列)
    {
        temp = a[i]; //缓存将要与自序列中的元素进行比较的元素a[i];
        for(j = i; j > 0 && a[j - 1] > temp; j--)
        {
            a[j] = a[j-1]; //将大于temp的元素向后移动一个位置
        }
        a[j] = temp;
    }
}

 2.希尔排序

改进版的插入排序,通过比较相隔一定距离的元素;各趟比较所用的距离随着算法的进行而减小,知道只比较相邻的元素的最后一趟排序为止。

空间复杂度:希尔排序的时间复杂度与增量的选取有关。

void ShellSort( int a[], int n)
{
    int i,j, Increment;
    int temp;
    for(Increment = n / 2; Increment > 0; Increment /= 2)
    {
        for( i = Increment; i < n; i++)
        {
            temp = a[i];
            for( j = i; j >= Increment; j -= Increment )
            {
                if(temp < a[ j - Increment] )
                    a[j] = a[j - Increment];
                else
                    break;
            }
            a[j] = temp;
        }
    }
}

 3.冒泡排序

思想:

(1)将待排序数组a[n]前后两个数据比较,大的放后面。

(2)经过上面一轮循环后,最大的元素沉到了底部。下一轮循环不用比较最后的一个元素,因为已经确定是最大的。

(3)重复上面的步骤。

void BubbleSort(int a[], int n)
{
    int sign = 0;
    for(int i = 0; i < n; i++)
    {
        for(int j = 1; j < n-i; j++)
        {
            if(a[j-1] > a[j])
            {
                swap(a[j-1], a[j]);
                sign = 1;
            }
        }
        if(sign == 0) break;
    }
}

 

基本排序算法学习

标签:

原文地址:http://www.cnblogs.com/mrethan/p/4631193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!