- 博客(6)
- 收藏
- 关注
原创 精典排序算法-堆排序
堆排序:问题:给定一个无序数组,要求进行排序(从小到大)思路:1.将待排序数组想象成一个堆结构,并将其调整为最大堆(在堆结构中,任何一个父节点大于其子节点的值)【从最后一个父节点开始调整i=n/2-1】 2.堆顶元素与待排序数组中最后一个元素进行交换swap(a[0],a[nums-1]) 3.待排序数据减少一个,即num--;将待排序数组重新调整最大堆结构,重复第二步n-1次,完成数据排序主要代码如下(C++):1.最大堆调整:vo...
2021-09-26 21:01:58 193
原创 精典排序算法-归并排序
归并排序:问题:给定一个无序数组,要求进行排序(从小到大)思路:将两个有序数组合并成一个有序数组1.将数组分解成单个元素为一组,表示组内有序 2.将俩俩数组进行合并,将两个有序数组合并成一个有序数组,重复第二步直到排序完成 3.合并过程先申请两数组合并后大小的空间将两个排序好的数组逐一进行比较,然后往申请的空间里放主要代码如下(C++):1.分解void mergeSort(vector<int> &nu...
2021-09-23 19:50:47 72
原创 精典排序算法-希尔排序
希尔排序:(在直接插入排序的基础上进行分组插入排序)问题:给定一个无序数组,要求进行排序(从小到大)思路:1.首先设置一个初始值gap=n/2;将数组分成gap组 2.每组的数值则为a[0]/a[1]/a[2].....a[0+1*gap]/a[1+1*gap]/a[2+1*gap].....直到下标越界 3.将每组数据进行直接插入排序 4.将gap缩进为gap/2;分组插入,当gap为1时直接插入完成数组排序主要代码...
2021-09-22 18:33:51 71
原创 精典排序算法-插入排序
插入排序:问题:给定一个无序数组,要求进行排序(从小到大)思路:1.比较相邻两个元素,如果前一个大于后一个,通过swap函数进行交换,这样交换完最后一个元素将是这组数里最大的元素。2.此后将最后一个元素排除在外,从数组0位置再次开始重复上述比较操作,排除最后一个。3.依次执行,直到没有任何一对数字需要比较。优化:如果此数组是一个有序数组,那么进行多次循环比较实则是浪费时间,最优时间复杂度会变高。所以添加一个bool类型变量flag,如果第一轮比较没有出现具有交换条件,那么直接结束所有循.
2021-09-20 18:36:45 72
原创 精典排序算法-选择排序
选择排序:问题:给定一个无序数组,要求进行排序(从小到大)思路:1.在数组中找到最大值,并记录最大值的下标maxindex,将最大值与最后一个元素交换,即swap(vec[maxindex],vec[n-1]);2.待排数组减少一个,继续第一步,循环操作直到排序完毕主要代码如下(C++):void selectSort(vector<int>& vec){ for(int j=vec.size();j>=0;j--)...
2021-08-27 19:51:14 73
原创 精典排序算法-冒泡排序
冒泡排序:问题:给定一个无序数组,要求进行排序(从小到大)思路:1.比较相邻两个元素,如果前一个大于后一个,通过swap函数进行交换,这样交换完最后一个元素将是这组数里最大的元素。2.此后将最后一个元素排除在外,从数组0位置再次开始重复上述比较操作,排除最后一个。3.依次执行,直到没有任何一对数字需要比较。优化:如果此数组是一个有序数组,那么进行多次循环比较实则是浪费时间,最优时间复杂度会变高。所以添加一个bool类型变量flag,如果第一轮比较没有出现具有交换条件,那么直接结束所有循.
2021-08-26 11:59:45 96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人