文章目录
- 前言
- 打印数组函数
- 一、插入排序
- 二、希尔排序
- 总结
前言
C语言数据结构排序、插入排序、希尔排序等的介绍
打印数组函数
打印数组函数定义
// 打印数组
void PrintArray(int* a, int n)
{int i = 0;for (i = 0; i < n; i++){printf("%d ", a[i]);}printf("\n");
}
一、插入排序
插入排序定义
// 插入排序------升序
void InsertSort(int* a, int n)
{int i = 0;for (i = 1; i < n; i++){int end = i - 1;int tmp = a[end + 1];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}
}
插入排序测试
void TestInsertSort()
{int a[] = { 9, 6, 5, 7, 3, 1, 4, 2, 8, 0 };int sz = sizeof(a) / sizeof(a[0]);PrintArray(a, sz);InsertSort(a, sz);PrintArray(a, sz);
}
效果如下:
二、希尔排序
-
希尔排序的思想是先分组,进行预排序,使数组趋向于有序。
-
然后进行逐步减小分组的跨度,直至分组跨度为1,变为有序排序。
-
如上图所示,先进行分组,在组内进行排序。
希尔排序定义
// 希尔排序
void ShellSort(int* a, int n)
{int gap = n;while (gap >= 1){gap /= 2;int j = 0;for (j = 0; j < gap; j++){int i = 0;for (i = gap + j; i < n; i++){int end = i - gap;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}}
}
希尔排序测试
void TestShellSort()
{int a[] = { 9, 8, 7, 6, 5, 1, 2, 3, 4, 0, -9, -26, -65, 100, 1000, 10000 };int sz = sizeof(a) / sizeof(a[0]);PrintArray(a, sz);ShellSort(a, sz);PrintArray(a, sz);
}
效果如下:
总结
C语言数据结构排序、插入排序、希尔排序等的介绍