希尔排序

xiaoxiao2021-02-28  62

一、希尔排序:

希尔排序也称为“缩小增量排序”,基本原理是:首先将待排序的元素分为多个子序列,使得每个子序的元素个数相对较少,对各个子序分别进行直接插入排序,待整个待排序序列“基本有序后”,再对所有元素进行一次直接插入排序。

具体步骤如下:(1)选择一个步长序列t1, t2, ..., tk,满足ti > tj( i <j),tk = 1。(2)按步长序列个数k,对待排序序列进行k趟排序。

(3)每趟排序,根据对应的步长ti,将待排序的序列分割成ti个子序列,分别对各个子序列进行直接插入排序。

希尔排序的特点:时间复杂度:希尔排序的时间复杂性在O(nlog2n)和O(n2 )之间,大致为O(n1.3)

稳定性:不稳定

#include <stdio.h>

void ShellSort(int array[], int length) { int i, j; int h; int temp; for (h = length / 2; h > 0; h = h / 2) { for (i = h; i < length; i++) { temp = array[i]; for (j = i - h; j >= 0; j -=h) { if (temp < array[j]) { array[j + h] = array[j]; } else { break; } } array[j + h] = temp; } } } int main() { int i = 0; int a[] = {0, 5, 2, 4, 3, 1, 7, 6, 8, 9}; int length = sizeof (a) / sizeof(a[0]); ShellSort(a, length); for (i = 0; i < length; i++) { printf("%d ", a[i]); } printf("\n"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2631234.html

最新回复(0)