
java基本排序算法
奔跑的大马哈鱼
这个作者很懒,什么都没留下…
展开
-
java基本排序算法之快速排序
快速排序基本思想 快速排序(Quicksort)是对冒泡排序的一种改进。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度分析最优情况下,快速排序算法的时间复杂度为O(nLogn);最坏情况下,待排序的序列原创 2016-08-05 10:15:59 · 467 阅读 · 0 评论 -
java基本排序算法之直接插入排序
直接插入排序的基本操作是将一个记录插入到已经安排好序的有序表中,从而得到一个新的,记录数增1的有序表时间复杂度最好情况,排序表本身基本有序,时间复杂度为O(n)最坏情况,排序表是逆序,时间复杂度为O(n2)平均情况,时间复杂度为O(n2) public void InsertSort(int[] array) { int j; for(int i =原创 2016-08-05 10:27:38 · 440 阅读 · 0 评论 -
java基本排序之冒泡排序
冒泡排序是一种交换排序基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。问题:当序列已经基本有序,有很多没有必要的比较,尽管没有交换数据,可是之后的大量比较还是大大多余了,当进行完几次比较,序列已经变得有序,但是循环还没有执行玩,就不需要再继续后面的循环判断了,下面的的代码,增加一个标记变量flag来实现这个功能。public void BubbleSort(int[]原创 2016-08-06 08:44:41 · 323 阅读 · 0 评论 -
java基本排序之简单选择排序
简单选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换。通俗来讲就是在排序的时候找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序定位工作。复杂度分析 - 最大的特点就是交换移动数据次数相当少,这样就节约了相应的时间。无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,比较需要n(n-原创 2016-08-07 10:58:25 · 306 阅读 · 0 评论 -
java基本排序之希尔排序
希尔排序将原有大量记录数的记录进行分组。分割成若干个子序列,此时每个子序列待排序的记录个数就比较少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时,注意只是基本有序,再对全体记录进行一次直接插入排序。 所谓的基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。比如{2,1,3,6,4,7,5,8,9}这样的就可以称为基本有序。 采取跳跃分隔的策略:将相原创 2016-08-08 08:49:27 · 347 阅读 · 4 评论 -
java基本排序之归并排序
归并排序原理:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2](向上取整),个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。归并排序的一种稳定排序,即相等元素的顺序不会改变. 时间复杂度:归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(原创 2016-08-09 15:49:38 · 368 阅读 · 0 评论 -
java线程yield(),sleep(),wait()区别
1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优原创 2016-08-10 16:11:12 · 388 阅读 · 0 评论 -
快速排序非递归java
private static void quickSort(int[] a, int start, int end) { LinkedList<Integer> stack = new LinkedList<Integer>(); // 用栈模拟 if (start < end) { stack.push(end); s原创 2017-06-30 13:01:59 · 2510 阅读 · 1 评论