![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
Ninja_Z
非淡泊无以名志,非宁静无以致远。
展开
-
Insertion Sort(插入排序)
基本思路: 当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移动。即逐个与左边元素进行比较。原创 2017-03-21 22:03:01 · 337 阅读 · 0 评论 -
Shell Sort(希尔排序)
基本思路: 希尔排序出发点是插入排序,插入排序之所以低效,每一次只向前移动一个位置。而希尔排序的思想在于每次将数组项移动若干位置。 这里我们使用3X+1增量序列import java.util.Scanner;public class Shell { public static void sort(Comparable[] a){ int N = a.length;原创 2017-03-22 10:41:15 · 312 阅读 · 0 评论 -
排序的有趣应用:Shuffling(洗牌)
洗牌基本思想: 在现实应用中,例如斗地主游戏,如何洗牌而没有漏洞成为一个十分关键的因素。这里介绍一个简单的洗牌方法。 将一串数字例如1,2,3,4,5,6,7,8,9,10顺序排放,开始第一张和自己本身交换;然后在2的前面包括2里面随机生成一个索引,用第二张牌和他交换位置;接着在3的前面包括3里面随机生成一个索引,用第三张牌和他交换位置…以此类推,都与需要交换的那张牌的本身或者前面洗过的牌进行交原创 2017-03-22 14:09:54 · 486 阅读 · 0 评论 -
Merge Sort(归并排序)
基本思路: 1.把数组一分为二,然后再不断将小数组递归一分为二下去,经过一些排序再将它们合并起来。 2.排序之前需要一个辅助数组,用于记录数据。第一步将原数组(左右分别有序)拷贝到辅助数组里。 3.需要三个下标:i指向左边子数组(有序);j指向右边子数组(有序);k指向原数组即排好序的数列。比较下标ij对应的元素,将小的放回k处,逐个比较。import java.util.Scanner;pu原创 2017-03-30 20:25:46 · 393 阅读 · 0 评论 -
Bubble Sort(冒泡排序)
基本思想: 相邻元素两两比较,大的往后放,这样,第一次完毕后,最大值就出现在了最大索引处 同理,继续,即可得到一个排好序的数组 规律: 两两比较,大的往后放 第一次排序完,下一次比较的时候就少了一个元素的比较第一次比较,有0个元素不比第二次比较,有1个元素不比第三次比较,有2个元素不比 ……第n-1次比较,有n-2个元素不比(最后一次比较) 总共需要比较数组长度-1趟代码如下原创 2017-05-22 14:22:16 · 304 阅读 · 0 评论 -
Selection Sort(选择排序)
基本思路: 未排序部分,从前向后找到最小的项跟未排序中第一项交换位置。public class Selection { //排序 public static void sort(Comparable[] a) { int N = a.length; for(int i=0;i<N;i++) { int原创 2017-03-20 14:48:30 · 328 阅读 · 0 评论