建设一个大型电影网站费用,wordpress 在线编辑器,坪山手机网站建设,企业展示网站 价钱目录
1 - 排序的概念及其运用
1.1 - 排序的概念
1.2 - 常见的排序算法
2 - 插入排序
2.1 - 基本思想
2.2 - 直接插入排序
2.2.1 - 代码实现
2.3 - 希尔排序(缩小增量排序)
2.3.1 - 代码实现 1 - 排序的概念及其运用
1.1 - 排序的概念及其运用
1.1 - 排序的概念
1.2 - 常见的排序算法
2 - 插入排序
2.1 - 基本思想
2.2 - 直接插入排序
2.2.1 - 代码实现
2.3 - 希尔排序(缩小增量排序)
2.3.1 - 代码实现 1 - 排序的概念及其运用
1.1 - 排序的概念
排序所谓排序就是使一串记录按照其中的某个或某些关键字的大小递增或递减的排列起来的操作。
稳定性假定在待排序的记录序列中存在多个具有相同的关键字的记录若经过排序这些记录的相对次序不变即在原序列中r[ i ] r[ j ]且r[ i ] 在 r[ j ]之前而在排序后的序列中r[ i ] 仍在 r[ j ]之前则称这种排序算法是稳定的否则称为不稳定。
内部排序数据元素全部放在内存中的排序。
外部排序数据元素太多不能同时放在内存中根据排序过程的要求不能在内外存之间移动数据的排序。
1.2 - 常见的排序算法 2 - 插入排序
2.1 - 基本思想
直接插入排序是一种简单的插入排序法其基本思想是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中直到所有的记录插入完为止得到一个新的有序序列。
实际中我们玩扑克牌时就用到了插入排序的思想。 2.2 - 直接插入排序
当插入第i(i 1)个元素时前面的arr[0]arr[1]arr[2]……arr[i - 1]已经排好序此时用arr[i]的排序码与arr[i - 1]arr[i - 2]……的排序码顺序进行比较找到插入位置即将arr[i]插入原来位置上的元素顺序后移。 直接插入排序的特性总结
元素集合越接近有序直接插入排序算法的时间效率越高时间复杂度空间复杂度他是一种稳定的排序算法稳定性稳定
2.2.1 - 代码实现
#define _CRT_SECURE_NO_WARNINGS 1#includestdio.h
#includestdlib.h
#includestdbool.h// 打印
void PrintArray(int* a, int n)
{for (int i 0; i n; i)printf(%d , a[i]);printf(\n);
}// 插入排序
void InsertSort(int* a, int n)
{for (int i 0; i n - 1; i){int end i;int tmp a[i 1];while (end 0){if (a[end] tmp){a[end 1] a[end];--end;}else{break;}a[end 1] tmp;}}
}void TestInsertSort()
{int a[] { 9, 2, 6, 1, 7, 3 ,0, 5, 8, 4 };PrintArray(a, sizeof(a) / sizeof(int));InsertSort(a, sizeof(a) / sizeof(int));PrintArray(a, sizeof(a) / sizeof(int));
}int main()
{TestInsertSort();return 0;
} 2.3 - 希尔排序(缩小增量排序)
希尔排序法又称缩小增量法。希尔排序的基本思想就是先选定一个整数把待排序文件中所有记录分成各子序列并对每一组内的记录进行排序重复上述分组和排序的工作。当gap 1时完成排序。 希尔排序的特性总结
希尔排序是对直接插入排序的优化。当gap 1时都是预排序目的是让数组更接近于有序。当gap 1时数组已经接近有序了这样就会很快。整体而言可以达到优化的效果。希尔排序的时间复杂度不好计算因为gap的取值方法很多导致很难去计算。稳定性不稳定。
2.3.1 - 代码实现
#define _CRT_SECURE_NO_WARNINGS 1#includestdio.h
#includestdlib.h
#includestdbool.h// 插入排序
void InsertSort(int* a, int n)
{for (int i 0; i n - 1; i){int end i;int tmp a[i 1];while (end 0){if (a[end] tmp){a[end 1] a[end];--end;}else{break;}a[end 1] tmp;}}
}// 希尔排序
void ShellSort(int* a, int n)
{int gap n;for (int i 0; i n - gap; i){int end i;int tmp a[end gap];while (end 0){if (a[end] tmp){a[end gap] a[end];end - gap;}else{break;}}a[end gap] tmp;}
}void TestShellSort()
{int a[] { 9, 2, 6, 1, 7, 3 ,0, 5, 8, 4 };PrintArray(a, sizeof(a) / sizeof(int));InsertSort(a, sizeof(a) / sizeof(int));PrintArray(a, sizeof(a) / sizeof(int));ShellSort(a, sizeof(a) / sizeof(int));PrintArray(a, sizeof(a) / sizeof(int));
}int main()
{TestShellSort();return 0;
} 感谢大佬们的支持
互三啦