排序算法-希尔排序

1.希尔排序

将待排序数组按照步长进行分组,然后将每组的元素利用直接插入排序的方法进行排序,每次将步长折半减小,gap=1时,利用直接插入完成排序。

1)第一层循环将gap依次折半,对序列进行分组直到gap=1;

2)第二、三层循环利用直接插入排序的两次循环

2.图例

 3.算法

 

//希尔排序
void shellSort(int *arr, int num)
{
    // 9,1,2,5,7,4,8,6,3,5进行排序  第一次gap = 5;
    for (int gap = num/2;gap > 0;gap /= 2)
    {
        for (int i = gap;i < num;i++)
        {
            //进行分组插入排序,gab = 5时,arr[i]和arr[gap+i]比较
            for (int j = i; j - gap >= 0 && arr[j - gap] > arr[j]; j -= gap)
            {
                //交换
                swap(arr[j - gap], arr[j]);
            }
        }
    }
}

void printArr(int *arr, int num)
{
    for (int i = 0;i < num;i++)
    {
        cout << arr[i] << " ";
    }
}

int main()
{
    int a[] = { 9,1,2,0,5,7,4,8,6,3,5 };

    cout << "排序前: " << endl;
    printArr(a, 11);
    shellSort(a, 11);
    cout << "\n";
    cout << "排序后: " << endl;
    printArr(a, 11);
    return 0;
}

4.运行截图 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章