归并排序可以看出是一个后序的排序, 先递归,然后从前面开始排好序,然后再memcpy到原数组。 归并排序其实用在解决磁盘外的外排序问题中,如果有下面的场景,归并排序就起到了很大的作用。 编辑 时间复杂度 归并排序也是一种经典的O(N*logN) 空间复杂度是O(N),这时因为开辟了一块tmp临时数组 计数排序 思想:计数排...
即用待排序的数中,最大的数-最小的数+1就可以得到范围,从而减少空间浪费。接着用原数组的数减去最小值,将该值作为count数组的下标,即相对映射。最后进行排序,记得加回最小值min,这样数据才不会被改变。 排序算法的复杂度及稳定性 稳定性:指的是相同的数,在排序之后的相对位置没有改变。 分析: 时间 空间...
希尔排序中相等数据可能会交换位置,所以希尔排序是不稳定的算法。 希尔排序和插入排序对比 稳定性: 1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。 2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。
如下: #include"stdio.h"#include"string.h"#include<stdlib.h>#define N5//直接插入排序voidInsertSort(int*a)//升序{int i,j,t;for(i=1;i<N;i++)//从数组第二个元素开始{if(a[i-1]>a[i])//如果这次循环中i-1的数大于a[i]的话,说明前面的元素也可能会有大于a[i]的;如果不大于,则前面...
排序是我们生活中经常会面对的问题。上一节我为大家介绍了几种相对简单的排序算法,如冒泡、插入、选择等排序,这几种排序算法的时间复杂度是o(N^2),这些排序算法在数据量比较少时,其计算的时间也不会显得很大,但数据量比较大,比如100万、1000万时,我们就要使用时间复杂度更优的算法,比如快排和归并排序,下面我就...
//排序: /* 1、录入学生基本信息 2、直接插入排序 3、冒泡排序 4、快速排序 5、简单选择排序 6、堆排序 7、2-路归并排序 8、输出学生信息 */ #include<stdio.h> #include<stdlib.h> typedef struct{ char name[20]; int num; int score;
void Swap(int* x, int* y) { int tmp = *x; *x = *y; *y = tmp; } void SelectSort(int* a, int n)//升序 { for (int i = 0; i < n-1; i++)//n个数据,排n-1次 { int mini = i;//0到i-1都已经排好,下一个就放在i这个位置上 for (int j = i+1; j < n; j++...
待排序记录数量很大,以至于内存不能容纳全部数据,在排序的时候需要对外存进行访问的排序过程。 时间复杂度 关键字的比较次数和记录移动次数。 空间复杂度 执行算法所需的附加存储空间。 插入排序 直接插入排序 是一种简单的排序方法,基本操作是将一条记录插入到已排好序的有序列表中,从而得到一个新的、记录数量增一...
下面是一个简单的C语言实现交换排序的例子:void swapSort(int arr[], int len) { int i, j, temp;for (i = 0; i < len - 1; i++) { for (j = i + 1; j < len; j++) { if (arr[i] > arr[j]) { temp = arr[i];arr[i] = arr[j];arr[j] = temp;} } } } 在上面的...