![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm
小刚lz
这个作者很懒,什么都没留下…
展开
-
Java提高 - 八大排序方法之其他算法
所谓的八大算法只是通过比较选出的比较简单高效的排序算法,而现实中并不是只有这八种排序算法,还有一些其衍生算法。总体来说并不是这八大算法就是万能的,要看具体情况来实现,根据具体情况选择适合你程序的最优排序算法。 接下来就展示一个八大算法之外的排序算法。鸡尾酒排序,这种算法是冒泡法的衍生算法。首先通过冒泡法吧最大的移动到最后,然后从倒数第二位开始把最小的移动到第一位,然后在移动第二大的到倒数第二位。原创 2015-05-08 20:16:16 · 458 阅读 · 0 评论 -
Java提高 - 字符串循环移位
问题,给你一个字符串,要求循环左移n位。比如对"abcdefg"循环左移2位,我们要得到"cdefgab"。附加条件,不能使用连续辅助空间(包括动态分配),只能使用若干单个变量(即O(1)空间)。 首先,我们知道,反转一个字符串操作("abcd"变"dcba"),是不需要额外数组辅助的,只要头尾数据交换就可以了。然而,可能你不知道,仅仅使用字符串反转可以实现字符串循环移位: /** * 用三原创 2015-05-14 20:25:08 · 5331 阅读 · 3 评论 -
Java提高 - 八大排序方法之归并排序
原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。 要点:归并、分治 实现: /** * 归并排序 * * @param L */ public static void MergeSort(int L[], int m, int n) { int k; if (m < n) { k = (m + n) / 2; MergeSort(L,原创 2015-05-06 20:08:40 · 396 阅读 · 0 评论 -
Java提高 - 奇数阶幻方
所谓幻方(最基本的那种),就是横,竖,对角线上的数的和等于一个常数的数字方阵 4 3 8 9 5 1 2 7 6 以上这个图,有什么规律?容易写成代码吗?我们把这个图,向右复制五次,向下复制三次,展开一下: 4 3 8 4 3 8 4 3 8 4 3 8 4 3 8 9 5 1 9 5 1 9 5 1 9 5 1 9 5 1 2 7 6 2 7 6 2 7 6 2 7 6 2 7 6原创 2015-05-13 20:32:53 · 1539 阅读 · 0 评论 -
Java提高 - 八大排序方法之堆排序
这篇文章讲八种排序方法中的堆排序,这种排序属于选择排序的范畴。 原理:利用大根堆或小根堆思想,首先建立堆,然后将堆首与堆尾交换,堆尾之后为有序区。大根堆(小根堆)即它的左右节点(2n+1和2n+2)所对应的数值小于或等于(大于或等于)它自己,从而堆首即为整个对队列最大值(最小值)。 要点:建堆、交换、调整堆 实现: /** * 堆排序*************************原创 2015-05-05 20:19:04 · 385 阅读 · 0 评论 -
Java提高 - 八大排序方法之直接选择排序
这篇文章讲八种排序方法中的冒泡排序,这种排序属于选择排序的范畴。 原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。 要点: 实现: /** * 直接选择排序************************************** */ public static void SelectSort(int L[]) {原创 2015-05-04 21:11:39 · 311 阅读 · 0 评论 -
Java提高 - 菱形打印
很多人,打印菱形在控制台的思路是,把菱形上下拆分,分两段很接近的代码来打印,其实这样代码很不好看,并且不好阅读。我们知道,要打印的图案是这种: * *** ***** *** * 满足上下对称,左右对称,那么,你能不能也弄一个二重循环,同样是对称的?很简单,首先我们要抛开习惯性思维,for循环不一定要在0开始或者0结束。我们可以让循环从-c到c,这样就轻松产生一个原创 2015-05-12 19:35:52 · 610 阅读 · 0 评论 -
Java提高 - 八大排序方法之快速排序
这篇文章讲八种排序方法中的冒泡排序,这种排序属于交换排序的范畴。 快速排序 原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。 要点:递归、分治 实现: /** * 快速排序************************************** */ public static void QuickSort(int L原创 2015-05-03 18:02:44 · 370 阅读 · 0 评论 -
Java提高 - 质数判断
质数判断,对于这个,很多人可能会直接这样写: public static boolean isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) return false; } return true; } 这是最简单的。50000以内输出所有的质数用了469毫秒。 又或者有的人知道平方根的优化: pu原创 2015-05-11 19:52:05 · 503 阅读 · 0 评论 -
Java提高 - 八大排序方法之希尔排序
这篇文章讲八种排序方法中的希尔排序,这种排序属于插入排序的范畴。 希尔排序: 原理:又称增量缩小排序。先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。 要点:增量的选择以及排序最终以1为增量进行排序结束。 实现: public static void ShellSort(int L[]) { int d原创 2015-04-30 22:52:47 · 423 阅读 · 0 评论 -
Java提高 - 八大排序方法之直接插入排序
这篇文章讲八种排序方法中的直接插入排序和希尔排序,这两种排序都属于插入排序的范畴。 直接插入排序: 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。 要点:设立哨兵,作为临时存储和判断数组边界之用。 实现:public static void InsertSort(int L[]) { int原创 2015-04-29 22:23:05 · 389 阅读 · 0 评论 -
Java提高 - 八大排序方法之冒泡排序
这篇文章讲八种排序方法中的冒泡排序,这种排序属于交换排序的范畴。这个算法很简单,很多人在排序的时候都会下意识的选择这种排序算法。 冒泡排序 原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。 要点:设计交换判断条件,提前结束以排好序的序列循环。 实现: public static void BubbleSort(int L[]) { int i, j; bo原创 2015-05-02 13:56:22 · 536 阅读 · 0 评论 -
Java提高 - 八大排序方法之基数排序
基数排序 原理:将数字按位数划分出n个关键字,每次针对一个关键字进行排序,然后针对排序后的序列进行下一个关键字的排序,循环至所有关键字都使用过则排序完成。好像很难理解是吧,这里举个例子就容易多了,你可以先创建十个数组,第一个数组放个位数0的、第二个数组放个位数是1的,依次类推。然后把他们重新排列下来,清空数组。接下来第一个数组放十位数为0的、第二个放十位数为1的,依次类推,然后把他们重新排列下来原创 2015-05-07 19:56:51 · 321 阅读 · 0 评论