![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
一笑而过者也
爱好java,分布式开发
展开
-
排序(一)之冒泡排序
冒泡排序原理: 第一个元素与第二个元素比较,如果第一个元素大,与第二个交换; 第二个元素与第三个元素比较,如果第二个元素大,与第三个交换; .... 第一次循环,找出最大值 ... 第二次循环,找出次最大值图示如下:代码如下: @Test public void b...原创 2018-08-27 21:44:26 · 1003 阅读 · 0 评论 -
排序(二)之鸡尾酒排序
鸡尾酒排序改自冒泡排序,比冒泡排序性能好些,主要解决问题是某个小元素在右侧,可以快速移至左侧,而不用靠冒泡排序的大循环,每次移动一个位置。比如这个顺序:2,3,4,5,6,7,8,9,1。鸡尾酒排序的思想是:第一次从左侧循环到右侧,然后再从右侧循环到左侧,这是一个大循环。然后再从左侧循环到右侧,右侧循环到左侧。下面代码中做了优化,用了一个标志变量isSorted,如果在某次循环中没有元素位置...原创 2018-08-27 22:56:29 · 734 阅读 · 0 评论 -
排序(四)之快速排序 指针交换法
在上一节讲的填坑法基础上,再修改一下,指针交换法的原理是,也是先移动右指针,找到一个符合条件的元素,再移动左指针,找到一个符合条件的元素,,右指针找到的是比基准元素小的,左指针找到的是比基准元素大的,然后将两个指针指向数据进行交换,然后再继续移动右指针,然后左指针,直到两个指针重合,把基准元素与两个指针重合时的元素交换,然后再递归循环。代码如下: 用递归实现 package...原创 2018-09-11 21:16:34 · 1779 阅读 · 1 评论 -
排序(三)之快速排序 填坑法
快速排序,采用分治法思想,开始选一个基准元素(默认第一个,也是第一个坑的位置),然后一个左指针,一个右指针,开始右指针向左移动,遇到比基准元素小的停下,放到坑的位置,这个元素的位置就成了新的坑,,然后左指针开始向右移动遇到比基准元素大的停下,把元素放入刚才新的坑的位置,这个位置又成了新的坑,,然后再移动右指针....然后再移动左指针...当两个指针重合时,最后一个坑的位置填入基准元素,最终比基准元...原创 2018-09-10 22:12:39 · 1140 阅读 · 0 评论 -
时间复杂度
时间复杂度1. 概念用来表示一个算法的理论上的耗时时间2. 时间频度一个算法中,语句执行的次数,被称为时间频度T(n)3.时间复杂度存在某个辅助函数f(n),当n->∞时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记做T(n)=O(f(n)),则称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。用大O来表示时间复杂度4. 计算方法...原创 2019-01-31 22:59:43 · 2670 阅读 · 1 评论 -
选择排序
选择排序,这个比较简单:每次比较出最小的,和第一个元素交换和第二个元素交换.,…时间复杂度O(n^2),空间复杂度O(1) public void selectSort() { int[] arr = {1, 2, 0, 9, 3, 65, 8, 9, 0, 3, 1, 8, 6, 4, 9}; for (int i = 0; i < arr.l...原创 2019-03-02 19:07:45 · 150 阅读 · 0 评论 -
插入排序
* 插入排序 * 每次取出一个新的元素,插入到已经有序的数组中,并保持有序 * 例如 6 3 5 9 1 * 第一个元素为6,可以认为6为已经有序的元素,第一个元素就不用取了 * 取第二个元素3,排序后 * 3 6 5 9 1 * 取第三个元素5,排序后 * 3 5 6 9 1 * 取第四个元素9,排序后 * 3 5 6 9 1 * 取第五个元素1,排序后 * 1 3 5 ...原创 2019-03-02 21:35:40 · 202 阅读 · 0 评论