关于数据结构和算法:数据结构-常用排序算法

排序之间性能的比拟

间接插入排序

将一个记录插入到已排序好的有序表中,从而失去一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,而后从第2个记录一一进行插入,直至整个序列有序为止

插入排序算法的个别步骤:

1.从第一个元素开始,该元素能够认为已被排序;

2.取出下一个元素,在曾经排序的元素序列中从后向前扫描;

3.如果该元素(已排序)大于新元素,将该元素移到下一个地位;

4.反复步骤3,直到找到已排序的元素小于或者等于新元素的地位;

5.将新元素插入到该地位后,反复2~5

void insetSort(int arr[], int n)
{
    for (int i = 1; i < n; i++)
    {
        for (int j = i-1; j >= 0; j--)
        {
            if (arr[j] > arr[i])
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

希尔排序

希尔排序的算法思维:将待排序数组依照步长gap进行分组,而后将每组的元素利用间接插入排序的办法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,实现排序。

void shellSort(int arr[], int len)
{
    int insertNum;
    int grap = len / 2;

    while (grap)
    {
        for (int i = grap; i < len; i++)
        {
            insertNum = arr[i];
            int j = i;
            while (j >= grap && insertNum < arr[j - grap])
            {
                arr[j] = arr[j - grap];
                j -= grap;
            }
            arr[j] = insertNum;
        }
        grap /= 2;
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理