赞
踩
目录
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序不变,即在原序列中,r[ i ] = r[ j ],且r[ i ] 在 r[ j ]之前,而在排序后的序列中,r[ i ] 仍在 r[ j ]之前,则称这种排序算法是稳定的;否则称为不稳定。
内部排序:数据元素全部放在内存中的排序。
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。
实际中我们玩扑克牌时,就用到了插入排序的思想。
当插入第i(i >= 1)个元素时,前面的arr[0],arr[1],arr[2]……,arr[i - 1]已经排好序,此时用arr[i]的排序码与arr[i - 1],arr[i - 2]……的排序码顺序进行比较,找到插入位置即将arr[i]插入,原来位置上的元素顺序后移。
直接插入排序的特性总结:
- #define _CRT_SECURE_NO_WARNINGS 1
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<stdbool.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;
- }
希尔排序法又称缩小增量法。希尔排序的基本思想就是:先选定一个整数,把待排序文件中所有记录分成各子序列,并对每一组内的记录进行排序,重复上述分组和排序的工作。当gap = 1时,完成排序。
希尔排序的特性总结:
- #define _CRT_SECURE_NO_WARNINGS 1
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<stdbool.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;
- }
感谢大佬们的支持!!!
互三啦!!!
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。