![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
Carpenter_j
这个作者很懒,什么都没留下…
展开
-
选择排序(Selection Sorting) O(n^2)
选择排序的思想:从当前位置及以后未排好的元素中选出符合条件的元素(例如最小元素或最大元素),最后将这个选中的元素与当前位置的元素进行交换。选择排序的c++代码如下(该代码适合基本的数据类型,如果是自定义类型,则需要重载符号“<”来实现排序) template <typename T>void fun(T *a, int n) { for (int i = 0; i ...转载 2018-07-18 14:03:03 · 305 阅读 · 0 评论 -
插入排序(Insertion sorting)O(n^2)
插入排序思想:(跟一张一张抓扑克牌,然后从左往右,从大到小将这张牌插入合适的一样的思想)将当前元素与之前已经拍好序的元素挨个进行比较,如果不符合条件,则将当前位置的元素与之前对比的那个元素交换位置,然后依次与前面的元素比较,直到当前元素找到合适的位置为止。 C++代码如下;void insertSort(int a[], int n) { for (int i = 1; i <...原创 2018-07-19 13:38:18 · 173 阅读 · 0 评论 -
自顶向下的归并排序(Merge Sort) O(nlogn)
归并排序的基本思想: 该算法是采用分治法来实现的,将原来的数组不断对半分,直到分得每个数组含有一个元素后,再一层一层归并的过程(按要求排列好) 下面就是将数组逐渐二分的过程:对Level 3到Level2 的归并:最后一层的归并: 在上图中,将黑色箭头所指“1”与绿色箭头所指“2”进行大小比较,较小的赋值给箭头所指的“1”处。执...原创 2018-07-19 21:13:44 · 1353 阅读 · 0 评论 -
快速排序(Quick Sort) O(nlgn)
快速排序的基本思想: 在待排序的序列中选取一个值作为一个基准值,按照其他数值与这个基准值的大小关系将这个序列划分成两个子序列(基准值会在这两个子序列的中间,划分成一边所有元素比基准值大,一边所有元素比基准值小)。这样快速排序第一次排完,我们选取的这个基准值就会出现在它该出现的位置上。这就是快速排序的单趟算法,也就是完成了一次快速排序。 具体操作:以10个整型元素的数组arr表示:...原创 2018-07-22 16:10:45 · 588 阅读 · 0 评论 -
双路快速排序算法
为了解决数组中存在大量重复的元素使得在按基准值分成两部分时,重复元素都集中分到其中一部分的问题(如果两部分元素数量相差太大,快速排序算法是会退化为O(n^2)的),可以使用双路快速排序算法。 双路快速排序算法的基本思路:设置一个变量 i 从最左边开始遍历 直到找到第一个比 基准值大的数时停止,再设置个变量 j 从最右边开始遍历,直到找到第一个比 基准值小的数时停止,这时候交换i...原创 2018-07-22 19:03:02 · 811 阅读 · 0 评论 -
三路快速排序算法
即分为 大于 等于 小于 基准值的三部分// 递归的三路快速排序算法template <typename T>void __quickSort3Ways(T arr[], int l, int r){ if( r <= l ) return; // 随机在arr[l...r]的范围中, 选择一个数值作为标定点piv...转载 2018-07-22 19:39:32 · 1812 阅读 · 0 评论