![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
樱花树下的猫
这个作者很懒,什么都没留下…
展开
-
堆排序
堆,大根堆,小根堆堆是一棵完全二叉树并且分为大根堆和小根堆。大根堆为其任意非叶子结点都不小于其孩子结点,小根堆则为其任意非叶子结点都不大于其孩子结点。这里用一组数分别构建大根堆与小根堆。此为大根堆:此为小根堆:堆排序的思路如下:步骤一:将n个元素构成的序列构建成大根堆。步骤二:将最后一个元素与堆顶元素互换,这时堆尾元素为最大元素。步骤三:将排除堆尾元素的剩下n-1个元素继续构建大根堆。然后重复这几个步骤直到序列有序。构建大根堆现有如下数组其数据元素为 5,7,9,2,0如原创 2021-02-03 13:06:43 · 148 阅读 · 1 评论 -
希尔排序
//希尔排序void shellSort(vector<int>& nums) { int i, j, key, inc; for (inc = nums.size() / 2; inc != 0; inc /= 2) { for (i = inc; i != nums.size(); ++i) { key = nums[i]; for (j = i; j >= inc && key < nums[j - inc]; j -= inc)原创 2021-02-02 21:03:52 · 86 阅读 · 0 评论 -
快速排序
//快速排序void quickSort(vector<int>& nums, int low, int high) { int i = low; //low与high的值不变 int j = high; if (i >= j) { return; } if (i < j) { int temp = nums[i]; //基准值 //从后往前找到一个数小于基准值 while (i < j && nums[原创 2021-02-02 14:30:40 · 62 阅读 · 0 评论 -
插入排序
//插入排序void insertSort(vector<int>& nums) { for (int i = 0; i != nums.size(); ++i) { for (int j = i; j != 0; --j) { if (nums[j] < nums[j - 1]) { int temp = nums[j - 1]; nums[j - 1] = nums[j]; nums[j] = temp; } } }}in原创 2021-02-02 11:49:03 · 60 阅读 · 0 评论 -
选择排序
//选择排序void selectSort(vector<int>& nums) { int minIndex = 0; for (int i = 0; i != nums.size() - 1; ++i) { minIndex = i; for (int j = i + 1; j != nums.size(); ++j) { if (nums[minIndex] > nums[j]) { int temp = nums[minIndex]; n原创 2021-02-02 11:10:12 · 48 阅读 · 0 评论 -
冒泡排序
//冒泡排序void bubbleSort(vector<int>& nums) { int temp = 0; for(int i = 0; i != nums.size() - 1; ++i) { //对于n个数要进行n - 1趟排序 for (int j = 0; j != nums.size() - i - 1; ++j) { if (nums[j] > nums[j + 1]) { temp = nums[j]; nums[j] =原创 2021-02-01 22:13:59 · 56 阅读 · 0 评论 -
C++实现二分查找
二分查找二分查找是从“有序表”中寻找一个已经给定了的值。该算法从有序表的中间位置开始搜索,如果中间位置的元素正好就是要找的,搜索就结束。要找的元素小于中间元素,就继续搜索有序表的左半部分。如果要找的元素大于中间元素,就继续搜索有序表的右半部分,直到找到目标或者表中无目标元素。使用C++迭代器实现二分查找代码如下:#include <iostream> #include <vector>using std::vector;using namespace std;int原创 2021-01-13 02:01:46 · 929 阅读 · 0 评论