摘要:
10.7、归并排序 了解归并排序之前,我们先来了解归并, 给定两个数组A、B,A和B都是有序的,把A和B合并为一个有序的数组,其实我们就可以采用双指针来分别指向的A和B来对比并移动指针,然后需要一个辅助数组来记录排序后的值 ==二路归并的图解== ==归并排序图解== 先对给定一个数组,进行划分为多 阅读全文
摘要:
10.6、堆排序 对于n个关键字序列L[1...n],满足下面某一条性质,则称为堆(Heap) 若满足:$L(2i) \le L(i)$且$L(2i+1) \le L(i)$,$1 \le i \le n$ ,==大根堆(大顶堆)== 若满足:$L(i) \le L(2i)$且$L(i) \le L 阅读全文
摘要:
10.5、简单选择排序 这个算法的思想很简单,每次选择从没有排序的元素中选择最小(大)元素放到到前(后)面 简单选择排序是不稳定的 ==简单选择排序代码实现== #include <stdio.h> #include <stdlib.h> #define boolean int #define fa 阅读全文
摘要:
10.3、快速排序 算法思想 在待排序表[1...n]中任取一个元素pivot作为枢轴(基准,通常去首元素),通过一趟排序将待排序表划分为独立的两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中所有元素小于pivot,L[k+1...n]中所有元素都大于等于pivot,则p 阅读全文
摘要:
10.3、冒泡排序 从后往前依次比较两个元素,如果后面小于前面就交换,每次都会寻找到其中最小的那个元素放到前面 ==冒泡排序图解== ==冒泡排序的C代码实现== #include <stdio.h> #include <stdlib.h> #define boolean int #define f 阅读全文
摘要:
10.2、希尔排序 希尔排序的思想就是直接插入排序的升级版本; 把待排序的数组元素分为n个部分,对每个部分进行直接插入排序,然后把n减小继续重复,直到n=1时候,再进行n=1这一次就可以结束了。 注意:希尔排序不具备稳定性。 ==希尔排序的图示== ==希尔排序的代码实现== #include <s 阅读全文