插入排序

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace插入排序法8{9classProgram10{11staticvoidMain(string[]args)12{13int[]nums={23,23,44,66,76,98,11,3,9,7};14int[]arr=Sort(nums);15foreach(intiinarr)16{17Console.WriteLine(i.ToString());18}19Console.ReadKey();20}21///<summary>22///插入排序,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,23///这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。24///插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。25///</summary>26...
代码星球 代码星球·2020-03-29

选择排序

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespace选择排序法8{9classProgram10{11///<summary>12///排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排序,堆排序,选择排序,归并排序和快速排序,冒泡排序都是比较排序,它们通过对数组中的元素进行比较来实现排序,其他排序算法则是利用非比较的其他方法来获得有关输入数组的排序信息。13///</summary>14///<paramname="args"></param>15staticvoidMain(string[]args)16{17int[]nums={23,23,44,66,76,98,11,3,9,7};18int[]arr=Sort(nums);19foreach(intiinarr)20{21Co...
代码星球 代码星球·2020-03-29

【计算几何】多边形点集排序

问题描述:已知多边形点集C={P1,P2,...,PN},其排列顺序是杂乱,依次连接这N个点,无法形成确定的多边形,需要对点集C进行排序后,再绘制多边形。点集排序过程中,关键在于如何定义点的大小关系。以按逆时针排序为例,算法步骤如下:定义:点A在点B的逆时针方向,则点A大于点B1.计算点集的重心O,以重心作为逆时针旋转的中心点。2.计算点之间的大小关系。大小关系的计算,可由两种方法进行计算。方法1:以重心O作一条平行于X轴的单位向量OX,然后依次计算OPi和OX的夹角,根据夹角的大小,确定点之间的大小关系。OPi和OX夹角越大,说明点Pi越小,如图所示。方法2:根据向量叉积的定义,向量OPi和OPj的叉积大于0,则向量OPj在向量OPi的逆时针方向,即点Pj小于点Pi。依据方法2,多边形点集排序的代码如下:1typedefstructPoint2{3intx;4inty;5}Point;6//若点a大于点b,即点a在点b顺时针方向,返回true,否则返回false7boolPointCmp(constPoint&a,constPoint&b,constPoint&...

【转】十大经典排序算法

转自十大经典排序算法:https://www.cnblogs.com/onepixel/articles/7674659.html 0、算法概述0.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2算法复杂度0.3相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(BubbleSort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列...
代码星球 代码星球·2020-03-29

java的8种排序

8种排序之间的关系:   1, 直接插入排序  (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例  (3)用java实现 packagecom.njue;publicclassinsertSort{publicinsertSort(){inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};inttemp=0;for(inti=1;i<a.length;i++){intj=i-1;temp=a[i];for(;j>=0&&temp<a[j];j--){a[j+1]=a[j];//将大于temp的值整体后移一个单位}a[j+1]=temp;}for(inti=0;i<a.le...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

基础笔记8(二)(容器-引用类型的排序

1.类库中比较对象的大小实现了comparable接口的compateTo().  已经实现了的如:integer,date,String(比较是每个字符的unicode编码大小,字符一样比较长度)2.比较对象的两种方法:collections类提供的1.publicstatic<TextendsComparable<?superT>>voidsort(List<T>list){}比较的对象实现Comparable接口的comrateTo()比较方法,2.publicstatic<T>voidsort(List<T>list,Comparator<?superT>c){}另外编写两个对象的比较方法实现comparator接口的compate(),独立于比较的对象。 Collections提供排序算法。3.hashSet,treeSet对于集合自定义元素需要重写hashcode和equals方法以区别对象相等去重复。4.有序的集合和map:TreeSetTreeMap 4.1对...

自由拖拽元素,实现自由排序

上一期我们用jquery实现了通过元素的上下移动进行的排序,但是我们发现上下移动,虽然能够实现排序,但是不够灵活,比较僵硬,不能够快速达到我们想要排序的目的。下面我们讲解想如何实现快速的拖拽到自己想要的排序的位置。首先我们要引入一款插件gridly.js,用来实现元素拖拽。<scriptsrc="js/jquery.min.js"type="text/javascript"></script><scriptsrc="js/jquery.gridly.js"type="text/javascript"></script><linkhref="css/jquery.gridly.css"rel="stylesheet"type="text/css"/><style>.gred{width:90px;height:100px;background:red;font-size:20px;text-align:center;}.ccc{width:90px;height:100px;background:#ccc;text-...

用Jquery控制元素的上下移动 实现排序功能

在页面上,控制元素上下移动,进行排序是我们比较常用的功能,今天我用jQuery 写个 简单方便,功能齐全的实现方式。话不多说,直接上代码,下面是基础的引入jq和html元素部分:<scriptsrc="http://code.jquery.com/jquery-1.10.2.js"></script><styletype="text/css">.content{float:left;height:245px;width:400px;}.contentp{background:#eee;border:1px#000solid;height:30px;width:100%;}.right{float:left;margin-left:10px;height:245px;width:100px;padding:5px;margin-top:84px;}.rightdiv{width:85px;height:50px;margin:7px;text-align:center;background:#00BCD4;border-radius...

两种应该掌握的排序方法--------2.quick Sort

介绍http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F  用些里面的c++实现,感觉这个空间复杂度比较小。还挺好 intpartition(int*array,intleft,intright){       intindex=left;       intpivot=array[index];       swap(array[index],array[right]);       for(inti=left;i<right;i++)       {      &nb...

两种应该掌握排序方法--------1.shell Sort

先了解下什么都有什么排序算法 https://en.wikipedia.org/wiki/Sorting_algorithm  http://zh.wikipedia.org/zh/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.7.1.1.htm 希尔排序O(n1.25)  二叉排序排序(Binarytreesort)—O(nlogn)期望时间;O(n2)最坏时间;需要O(n)額外空間 基数排序O(n)  总结:若是数据量特别大的话,希尔排序会比快速排序慢点,但若是中小数据的比较,希尔排序更快速。而且希尔排序实现简单。 有两种排序我们应该掌握:一个是希尔排序(小量数据),一个是二叉排序排序(又称为二分查找法、快速排序)(大量数据) 希尔排序的wiki中列出的表   http:...

数据结构——排序算法总结

  排序(Sorting)就是将一组对象依照规定的次序又一次排列的过程,排序往往是为检索而服务的。它是数据处理中一种非常重要也非经常常使用的运算。比如我们日常学习中的查字典或者书籍的文件夹。这些都事先为我们排好序,因此大大减少了我们的检索时间,提高工作效率。  排序可分为两大类: 内部排序(InternalSorting):待排序的记录所有存放在计算机内存中进行的排序过程; 外部排序(ExternalSorting):待排序的记录数量非常大,内存不能存储所有记录。须要对外存进行訪问的排序过程。  外部排序自己现阶段还没有接触和学习。因此这里我们仅仅研究内部排序的集中算法。希望能和大家互相学习共同进步。  内部排序的中比較常见的有四种算法,以下我们分别对各种算法常见的算法进行学习。思维导图例如以下:   基本思想:在一个已经排好序的序列中,将未被排序的元素依照原先序列的排序规则插入到序列中的指定位置。  经常使用举例:直接插入排序 ...

[算法天天练]堆排序

#include<iostream>#include<algorithm>usingnamespacestd;voidHeapAdjust(int*a,inti,intsize)//调整堆{intlchild=2*i;//i的左孩子节点序号intrchild=2*i+1;//i的右孩子节点序号intmax=i;//临时变量if(i<=size/2)//如果i是叶节点就不用进行调整{if(lchild<=size&&a[lchild]>a[max]){max=lchild;}if(rchild<=size&&a[rchild]>a[max]){max=rchild;}if(max!=i){swap(a[i],a[max]);HeapAdjust(a,max,size);//避免调整之后以max为父节点的子树不是堆}}}voidBuildHeap(int*a,intsize)//建立堆{inti;for(i=size/2;i>=1;i--)//非叶节点最大序号值为size/2{HeapAdjust(...
IT猿 IT猿·2020-03-27

[转][算法天天练]堆与堆排序

排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:由于其它几种堆(二项式堆,斐波纳契堆等)用的较少,一般将二叉堆就简称为堆。一般都用数组来表示堆,i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2*i+1和2*i+2。如第0个结点左右子结点下标分别为1和2。 下面先给出《数据结构C++语言描述》中最小堆的建立插入删除的图解,再给出本人的实现代码,最好是先看明白图后再去看代码。 堆的插入每次插入都是将新数据放在数组最后。可以发现从这个新数据的父结点到根结点必然为一个有序的数列,现在的任务是将这个新数据插入到这个有序数据中&m...
IT猿 IT猿·2020-03-27

[转]快速排序 挖坑讲解方法

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:先来看实例吧,定义下面再给出(最好能用自己的话来总结定义,这样对实现代码会有帮助)。&nb...

[算法天天练]选择排序

#include<stdio.h>voidshow(intarr[],intlength){for(inti=0;i<length;i++){printf("%d",arr[i]);}printf("");}void_swap(int*a,int*b){inttmp=*a;*a=*b;*b=tmp;}voidSelectSort(intarr[],intlength){size_ti,j;intmin;for(i=0;i<length-1;i++){//假设arr[i]为最小的数min=arr[i];//通过循环获取数组中剩余数中的最小数for(j=i+1;j<length;j++){if(min>arr[j]){_swap(&min,&arr[j]);}}//将最小的数放到正确的位置if(arr[i]!=min){_swap(&arr[i],&min);}}}intmain(){intarr[10]={2,1,5,4,3,9,8,7,6,0};SelectSort(arr,10);show(arr,10);retur...
首页上一页...5758596061下一页尾页