题目:对某公司所有员工的年龄进行排序,要求时间复杂度为O(n) 分析: 在已有的排序算法中,性能最好的是快速排序,但是他在最好的情况下时间复杂度只能达到O(nlogn),无法满足本题的要求...但是我们可以从“年龄”这一特殊条件入手。 年龄具有显著的特征,那就是这些数值都分布在0-99之间。...由于待排序的数值均在0-99这个固定区间内,因此我们可以用一个长度为100的数组,记录0-99这100个年龄出现的次数。我们只需要扫描一遍所有员工的年龄,就能统计出这个数组。.../** * 对某公司所有员工的年龄进行排序,要求时间复杂度为O(n) * @author chibozhou * */ public class AgeSort { /** * 排序函数...* @param ages 存放公司全体人员年龄的数组 */ public static void ageSort(int[] ages){ //countAge的下标i代表年龄,countAge
去年看五行,今年看星座,星座计算代码,存起来,会用到的: /** * 星座/生肖/年龄 计算器 * Created by fengyunhe 2015/8/12. */ public class...} //default to return 魔羯 return constellationArr[11]; } /** * 计算年龄
", age=" + age + '}'; } } 二、定义随机信息类RandInfo,生成随机数据 package net.dc.test; import java.util.Random
", age=" + age + '}'; } } 定义随机信息类RandInfo,生成随机数据 package net.dc.test; import java.util.Random
以下是每一列里面的属性 年龄 年龄这个列里面有一个属性sortable ,值为true的时候,就会在前段显示一个样式 ?
一、冒泡排序: 利用冒泡排序对数组进行排序 二、基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。...四、java代码实现: package 冒泡排序; import java.util.Arrays; /** * 冒泡排序 * @author chen * */ public class BubbleSort...六、算法优化: 冒泡排序法存在的不足及改进方法: 第一,在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位flag,将其初始值设置为非...在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序; package 冒泡排序; import java.util.Arrays; /** * 冒泡排序改进版...由于局部冒泡排序和冒泡排序的数据移动次数总是相同的,而局部冒泡排序所需关键字的比较次数常少于冒泡排序,这意味着局部冒泡排序很可能在平均比较次数上对冒泡排序有所改进,当比较次数较少的优点不足以抵消其程序复杂度所带来的额外开销
插入排序 对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。...对于归并排序排序在数组排序中的运用,详细请点击此处。...这里主要介绍归并排序在链表排序中的运用。...在使用归并排序算法进行链表排序时,其基本思想是将链表细分成一个个子链表,将子链表进行排序,然后再将相邻的两个有序子链表进行合并,得到更长的有序链表,最后一步步得到整个有序链表,子链表进行合并排序时需要用到合并两个有序链表算法
高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...最终将会得到这样的序列,如下 1 2 3 4 5 6 7 8 9 10 到此,排序完全结束。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。
/* 功能:年龄计算 日期:2013-06-19 */ #include #include int numOfAge(int sum,int i); int...main (void) { printf("第一个人的年龄为10岁时,n第五个人的年龄为:"); printf("%d岁。"...return 0; } /************************************************************************ 函数名:numOfAge 功能:年龄计算...参数:int sum 第一个人的年龄 int i 第几个人 返回值:第五个人的年龄 **************************************************
经典算法——冒泡排序(Bubble Sort) 一、示例代码(伸手党看这里) 1.示例一 importjava.util.Arrays;public classBubbleSort {public static...int temp; /*临时变量,交换数据时使用*/ int length =arr.length;for(int p = length-1; p > 0; p–){ /*需要进行N-1(数组长度减一)趟排序...*/ for(int i = 0; i arr[i+1]){//进行位置交换 temp =arr[i]; arr[i]= arr[i+1...在使用冒泡排序的时候有可能会遇到这样一种情况:某一趟排序从头到尾,数组中的数字都没有发生位置交换。 那么上面这种情况说明了什么呢?说明了在经过上一趟的排序后,整个数组就已经被排好序了。...这么说的话原来计划的N-1趟排序我们是不是可以不用跑满了?是的!
2014年蓝桥杯Java C组——猜年龄 ---- 标题:猜年龄 小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“ 我们俩的年龄之积是年龄之和的6倍”。...小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过8岁啊。” 请你写出:小明的较小的妹妹的年龄。 注意:只写 一个人的年龄数字,请通过浏览器提交答案。不要书写任何多余的内容。...这里其实只要列出公式就能直接出结果了: 我们设妹妹的年龄为i,姐姐的年龄为j。...i - j| < 8 and i < j 由于只有一个等式:【i * j == 6 * (i + j)】,其余的两个都是不等式,那么,我们其实是无从下手的,数字简单我们可以看出来,既然小姑娘,那么年龄肯定是在...以下是输出结果: 由于我们要的是妹妹的年龄,故而输出10。姐姐的年龄是15岁,也就是j的值。
Java的冒泡排序 一、冒泡排序基本概念 冒泡排序,顾名思义,像冒泡一样的排序。...(n是需要排序数字的个数) 二、java代码实现的基本思路 利用二重for循环实现,外重循环设为i(每一趟),内重循环设为j(每一趟的每一次比较),假设有n个数字需要排序,设int[] num=new...三、java代码实现 package bubble; import java.util.Arrays; public class Demo_01 { public static void main(...在新一轮排序开始前检查flag的值,如果flag=true,就说明上一次没有数据交换,那么就结束排序,否则就再开始下一轮排序。...五、优化后的java代码实现 package bubble; import java.util.Arrays; public class Demo_01 { public static void main
选择排序思想:指针指向数组头,从指针位置到数组尾遍历最小值位置,将该位置与指针位置交换值,指针向后位移一位,循环遍历最小值 实现代码: /** * 选择排序 *...:基于选择排序,但有很大不一样。...直到两个指针重合 6.将”取出的元素“的值(31)放入指针位置 7.从该位置进行二分,以数组头部到low-1位置和low+1到数组尾部重复第1步操作 实现代码: /** * 快速排序...for (int i : nums) { System.out.print(i + " "); } 结果: 0 1 1 3 5 7 9 快速排序对大数据量排序有很高的性能...另外大量重复数据也会对快速排序性能有影响,重复的部分会在high和low换来换去
一、数组排序 //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用...java.util.Arrays对象的sort方法 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]);...} } 二、集合排序 public void sort(){ List list=new ArrayList(); list.add("5sss"); list.add...面试中如果需要排序 可以直接用这个方法 当然也可以用其他的 排序 。
下面我们来看看java中的Arrays.sort(int []a)方法是怎么实现的。 ---- 二、快速排序 java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序。...快速排序主要是对哪些基本类型数据(int,short,long等)排序, 而合并排序用于对对象类型进行排序。 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。...这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序排列。...1.实现原理 java1.7之后的版本,开始用双轴快排取代了以前的排序算法,现在只实现了8种基本数据类型性的双轴快排,对象的排序在1.7中还在用老式的,不过都标了过时,估计以后版本中就会被新的双轴快排取代了...尽管插入排序的时间复杂度为0(n^2),但是当数组元素较少时,插入排序优于快速排序,因为这时快速排序的递归操作影响性能。 2)较好的选择了划分元(基准元素)。
- 1; i++) {// 外循环控制排序的趟数 for (int j = 0; j < list.length - i - 1; j++) {// 内循环控制每一趟排序多少次...,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数 (2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值...(3)时间复杂度 1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。...2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: ?...image.png 综上所述:冒泡排序总的平均时间复杂度为:O(n2) ,时间复杂度和数据状况无关。
Java中Sort排序是非常常用的方法,这一章我们主要来认识一下Sort的用法和相关的实现。...;//会检查数组个数大于286且连续性好就使用归并排序,若小于47使用插入排序,其余情况使用双轴快速排序 System.out.println("升序排序:"); for (int num : array...除了两节所描述的情况,我们还会遇到对于自定义类排序的情况,例如我们现在有一个学生对象,想要根据年龄对其进行排序,学生类Student如下: public class Student { private...,年龄为null时为小 StudentAsc studentWang = new StudentAsc("王小二", 10); StudentAsc studentZhang = new StudentAsc...,年龄为null时为最大 StudentDesc studentWang = new StudentDesc("王小二", 10); StudentDesc studentZhang = new StudentDesc
Java中Comparable和Comparator区别小结 栗子 默认的sort方法,根据元素的自然顺序,将指定的列表按升序排序12345。...注:倒序54321 第二个方法,根据指定比较器产生的顺序对指定的列表进行排序。 快速记忆法 参考 当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。...此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。...强烈推荐(虽然不是必需的)使自然排序与 equals 一致。...Java中compareTo()方法比较字符串详解 Collections.sort(stringList, new Comparator() { @Override public
堆排序:堆排序的思想比较难理解,首先将数据看成是一个二叉树,对数据进行二叉树的建立(建堆),这个过程也是排序的过程,将最小或最大的值排到根节点上,如果采用最大值,则称为最大堆,反之,称为最小堆 例如:...有一个数组为[8,1,4,2,3],将他变为二叉树为: 8 1 4 2 3 要对它进行排序,可以从8开始,和他的左孩子和右孩子比较,将小的那个和本身进行替换,第一次替换变为...那么调用我们代码后形成的树为: 2 1 4 3 8 最小值1,并没有到达根节点,这时转变思路,不用从根节点开始建立,而是从树的底部开始建立堆,过程为: 先将1,2,3进行排序...nums = new int[]{5, 7, 1, 3, 9, 0, 1, 6, 8, 4}; buildHeap(nums); 结果: 0 1 1 3 4 5 6 7 8 9 堆排序本身用来排序性能并不高...,但是作为查找的时候性能很高,由于二分查找只针对已经排好序的顺序表,对于大数据量的散列表,推排序就可以出场了,因为推排序的建堆过程,尽可能少的访问节点,减少了对一个节点的重复访问,而又具有二分的思想,相比于其他排序
冒泡排序思想:一个指针指向数组尾,从头开始到指针位置进行遍历,相邻元素比较,较大值交换到后面位置,直到指针位置,此时最大值存入指针位置,指针往前移动一位,循环遍历过程,如果遍历过程没有发生交换,退出循环...实现代码: /** * 冒泡排序 * * @param nums */ public void bubbleSort(int[] nums) {...for (int i : nums) { System.out.print(i + " "); } 结果: 0 1 1 3 5 7 9 冒泡排序看似时间复杂度非常高...,达到O(n^2),但对于8个元素以内的排序,它的性能是最快的
领取专属 10元无门槛券
手把手带您无忧上云