当前位置: 首页 > news >正文

大气宽屏的网站做豆制品的网站

大气宽屏的网站,做豆制品的网站,公司创建的法制网站,简单网页设计作品欣赏0.导语 本节为手撕代码系列之第一弹#xff0c;主要来手撕排序算法#xff0c;主要包括以下几大排序算法#xff1a; 直接插入排序 冒泡排序 选择排序 快速排序 希尔排序 堆排序 归并排序 1.直接插入排序 【算法思想】 每一步将一个待排序的记录#xff0c;插入到前面… 0.导语 本节为手撕代码系列之第一弹主要来手撕排序算法主要包括以下几大排序算法 直接插入排序 冒泡排序 选择排序 快速排序 希尔排序 堆排序 归并排序 1.直接插入排序 【算法思想】 每一步将一个待排序的记录插入到前面已经排好序的有序序列中去直到插完所有元素为止。 【代码实现】 # 直接插入排序 def insert_sort(arr):length len(arr)for i in range(length):k ifor j in range(k,0,-1):if arr[j]arr[j-1]:t arr[j]arr[j]arr[j-1]arr[j-1]t arr [4,3,0,-1] insert_sort(arr) print(arr) 2.冒泡排序 【算法思想】 对相邻的元素进行两两比较顺序相反则进行交换这样每一趟会将最小或最大的元素“浮”到顶端最终达到完全有序。 【代码实现】 # 冒泡排序 def bubbleSort(arr):length len(arr)for i in range(length-1):flag Truefor j in range(length-i-1):if arr[j]arr[j1]:t arr[j]arr[j]arr[j1]arr[j1]tflag Falseif flag:break arr [6,-2,0,9] bubbleSort(arr) print(arr) 3.选择排序 【算法思想】 每一趟从待排序的数据元素中选择最小或最大的一个元素作为首元素直到所有元素排完为止简单选择排序是不稳定排序。 【代码实现】 def selectSort(arr):length len(arr)for i in range(length-1):min ifor j in range(i1,length):if arr[min]arr[j]:minjif min!i:t arr[i]arr[i]arr[min]arr[min]t arr [6,-2,0,9] selectSort(arr) print(arr) 4.快速排序 【算法思想】 快速排序思想----分治法。 先从数列中取出一个数作为基准数。 分区过程将比这个数大的数全放到它的右边小于或等于它的数全放到它的左边。 再对左右区间重复第二步直到各区间只有一个数。 每次划分得到枢椎的左边比它小右边比它大。 【代码实现】 方法一(通过遍历直接得到大于pivot和小于pivot的元素) class Solution:def quicksort(self, array)::type numRows: int:rtype: List[List[int]]if len(array)1:return arrayelse:pivotarray[0]small[i for i in array[1:] if ipivot]big[i for i in array[1:] if i pivot]return self.quicksort(small)[pivot]self.quicksort(big) //递归法耗时  方法二(双指针前后移动): def quickSort(arr,left,right):# 递归终止条件if leftright:returnpivot arr[left]i leftj rightwhile ij:while ij and arr[j]pivot:j-1while ij and arr[i]pivot:i1if ij:t arr[i]arr[i] arr[j]arr[j] t# 放入枢椎arr[left] arr[i]arr[i]pivot# 递归调用左区域quickSort(arr,left,i-1)# 递归调用右区域quickSort(arr,i1,right)arr [6,-2,0,9] quickSort(arr,0,len(arr)-1) print(arr) 5.希尔排序 【算法思想】 该算法也被称为缩小增量排序。 希尔排序是把记录按下标的一定增量分组对每组使用直接插入排序算法排序随着增量逐渐减少每组包含的关键词越来越多当增量减至1时整个文件恰被分成一组算法便终止。 【代码实现】 # 希尔排序 def shellSort(arr):length len(arr)# 设置初始增量gap length//2while gap0:# 从第gap个元素逐个对其所在组进行直接插入排序for i in range(gap,length):j iwhile j-gap0 and arr[j]arr[j-gap]:t arr[j]arr[j] arr[j-gap]arr[j-gap] tj-gapgap//2 arr [6,-2,0,9] shellSort(arr) print(arr) 6.堆排序 【算法思想】 堆是具有以下性质的完全二叉树每个结点的值都大于或等于其左右孩子结点的值称为大顶堆或者每个结点的值都小于或等于其左右孩子结点的值称为小顶堆。 基本思路   a.将无需序列构建成一个堆根据升序降序需求选择大顶堆或小顶堆;   b.将堆顶元素与末尾元素交换将最大元素沉到数组末端;(升序方法)   c.重新调整结构使其满足堆定义然后继续交换堆顶元素与当前末尾元素反复执行调整交换步骤直到整个序列有序。 【代码实现】 方法1 class HeapSort:def heapSort(self, nums):length len(nums)# 从后往前遍历交换堆顶与最后叶子节点并依次调整堆重复操作for j in range(length-1,0,-1):# 获取堆顶元素(获取同时调整堆)firstNum self.adjustHeap(nums,j1)# 交换最后一个叶子节点与堆顶元素temp nums[j]nums[j] firstNumnums[0] tempreturn nums# 调整堆(最大堆)每次返回最大堆顶元素def adjustHeap(self,nums,length):# 最后一个非叶节点i length//2 -1# 从最后一个非叶节点开始调整构成最大堆while i0:temp nums[i]k 2*i1while klength:if k1length and nums[k]nums[k1]:k1if nums[k]temp:nums[i]nums[k]ikelse:breakk2*k1nums[i] tempi-1return nums[0] s HeapSort() nums [8,9,7,10] t s.heapSort(nums) print(t) 方法2 def buildMaxHeap(self,arr):import mathfor i in range(math.floor(len(arr) / 2), -1, -1):self.heapify(arr, i)def heapify(self, arr, i):left 2 * i 1right 2 * i 2largest iif left arrLen and arr[left] arr[largest]:largest leftif right arrLen and arr[right] arr[largest]:largest rightif largest ! i:self.swap(arr, i, largest)self.heapify(arr, largest)def swap(self, arr, i, j):arr[i], arr[j] arr[j], arr[i]def heapSort(self, arr):global arrLenarrLen len(arr)self.buildMaxHeap(arr)for i in range(len(arr) - 1, 0, -1):self.swap(arr, 0, i)arrLen - 1self.heapify(arr, 0)return arr 7.归并排序 【算法思想】 归并排序是利用归并的思想实现的排序方法该算法采用经典的分治策略分治法将问题分(divide)成一些小的问题然后递归求解而治(conquer)的阶段则将分的阶段得到的各答案修补在一起即分而治之)。 【代码实现】 import math class Solution:def mergeSort(self,arr):if (len(arr) 2):return arrmiddle math.floor(len(arr) / 2)left, right arr[0:middle], arr[middle:]return self.merge(self.mergeSort(left), self.mergeSort(right))def merge(self,left, right):result []while left and right:if left[0] right[0]:result.append(left.pop(0));else:result.append(right.pop(0));while left:result.append(left.pop(0));while right:result.append(right.pop(0));return result  来自于wx公众号“光城”。   几种排序算法代码c版本 (暂无堆排和希尔排序) #include ../stdafx.h #include stdio.h #include stdlib.h #include string #include algorithm #include vector #include queue #includefunctional #include map #include iostream using namespace std;void BubbleSort(vectorint arr){if (arr.size() 0)return;for (int len arr.size() - 1; len 1; len--){for (int i 0; i len; i){if (arr[i]arr[i 1])swap(arr[i], arr[i 1]);}} }void SelectionSort(vectorint arr){if (arr.size() 0)return;for (int i 0; i arr.size() - 1; i){int min_index i;for (int j i 1; j arr.size(); j){/*if (arr[j]arr[j-1]) //每次左边起始位置向前移一个但是并不能保证一轮下来左边的数为最小值swap(arr[j-1], arr[j]);*/min_index arr[min_index] arr[j] ? min_index : j;}swap(arr[min_index],arr[i]);} }void InsertSort(vectorint arr){if (arr.size() 0)return;for (int i 1; i arr.size(); i){ //从索引1开始前面索引0区域为插入空间for (int j i - 1; j 0 arr[j]arr[j 1]; j--) //--逆序直接和插入空间最右(也即最大)的数比较就可知是否进行插入swap(arr[j], arr[j 1]); //不是i,j直接比较 j--决定插入的具体位置如1352} }void QuickSort(vectorint arr,int L, int R){if (L R) //递归终止条件return;int pivot arr[L];int i L, j R;while (i ! j){//先从右边找否则会报错while (arr[j] pivoti j)j--;while (arr[i] pivoti j)i;if (i j){swap(arr[i],arr[j]);}}arr[L] arr[i];arr[i] pivot; //最终pivot位置为iQuickSort(arr, L, i - 1);QuickSort(arr, i 1,R); }//归并先拆分为若干子数组通过merge()对其逐步合并排序 void Merge(vectorint arr, int L, int mid, int R){int i L, j mid 1;vectorint new_arr;while (i midj R){if (arr[i] arr[j])new_arr.push_back(arr[i]),i;elsenew_arr.push_back(arr[j]),j;}while (i mid)new_arr.push_back(arr[i]), i;while (j R)new_arr.push_back(arr[j]), j;for (int k L, t 0; k R; k, t) //把值复制回原arrarr[k] new_arr[t]; }void MergeSort(vectorint arr, int L, int R){if (L R)return;else{int mid (L R) / 2;MergeSort(arr, L, mid);MergeSort(arr, mid 1, R);Merge(arr, L, mid, R);} }int main(void){vectorint array {2, 1, 3, 5, 2, 6, 9, 2, 7 };//BubbleSort(array);//SelectionSort(array);//InsertSort(array);//QuickSort(array, 0, array.size() - 1);MergeSort(array, 0, array.size() - 1);vectorint vec array;vector int::iterator it;for (it vec.begin(); it ! vec.end();it)cout *it endl;getchar();return 0; }     基本算法复杂度 参考来源https://linux.cn/article-7480-1.html     转载于:https://www.cnblogs.com/nicetoseeyou/p/10512700.html
http://www.yutouwan.com/news/495120/

相关文章:

  • 秦皇岛营销式网站制作社交新零售
  • 商务网站模块设计时前台基础设施建设中国品牌设计公司
  • 外发加工网站源码下载邢台123生活最新帖子
  • 河南国控建设集团招标网站竞价推广方案
  • 国际知名的论文网站电子商务网站开发文档
  • 开通网站软件的会计科目怎么做网站开发子孙账号
  • 网站商城注意事项wordpress翻页
  • 做英文的小说网站做淘宝浏览单的网站
  • 河北省承德市兴隆县建设局网站站酷网素材图库海报设计
  • 网站搭建多少钱logo修改天元建设集团有限公司长清分公司
  • 美容会所网站模板下载WordPress插件提示信息
  • 山东网站建设企业公司中信建设官网站首页
  • 深圳免费网站设计芜湖公司企业排名
  • 成都网站优化公司哪家好网页设计软件列表html代码案例
  • 企业网站模块建设流程wordpress百度地图开发
  • 乐清英文网站建设济南网站中企动力
  • 山东系统建站怎么用广州黄埔区开发区建设局网站
  • 中国电信网站备案企业策划书格式及范文
  • 怎么建设一个购物网站深圳市手机网站建设哪家好
  • 建设一个网站系统要多久个人网页简历
  • 什么是网站建设中的目录软文自助发稿软件开发 网站建设
  • 建设工程人才招聘信息网站软件工程师需要具备哪些能力
  • 网站设计实验目的左侧导航栏网站模板
  • 漳州网站建设公司首选网站制作与网页制作
  • wordpress电影站群成都淮洲新城建设投资有限公司网站
  • 跨国网站浏览器重庆专业网站建设
  • 福田网站建设龙岗网站建设罗湖网站建设福田网站建设全国网站制作前十名
  • 做购物网站哪家公司好长沙网站营销
  • 网站建设总结与wordpress 4.5 浏览器ie8.0
  • 免费制作视频湛江seo网站推广