作为刚接触Java的小白,想要自己搞定一手人机五子棋,2048之类的玩物。在这之前,我发现数组是实现这些的地基,既然如此,那就从数组搞起呗。
数组,个人认为就是一个给定了大小给定了类型的容器,在这容器中有你设定的元素,你可以对这些元素进行各种升降排列,或者找出其中特殊的元素并进行一系列的运算。当然,这些行为的基础自然是今天说的数组排序方法。
一,冒泡排序:举 个 栗 子:5 2 0 4 1 3 一个容量为七的数组排升序(降序同理,最大值变最小就ok)
①从这组数中找那个冒泡的(最大的),把它踢到最后 2 0 4 1 3 5
②重复上述行为 2 0 1 3 4 5
③重复~~ 2 0 1 3 4 5
④~~0 1 2 3 4 5
⑤~~0 1 2 3 4 5 完成
Java代码实例:
二,选择排序:还是刚才那个栗子:5 2 0 4 1 3 升序
①找到数组中最小的 放到第一个位置 05 2 4 1 3
②数组中剩下的找到最小的放在第二个位置 0 15 2 4 3
③ ~~ 0 1 25 4 3
④~~ 0 1 2 3 5 4
⑤~~0 1 2 3 4 5 完成
Java代码实例:
三,插入排序 个人认为就是在摸扑克牌 桌上的牌堆就是你的数组 一张一张的摸到手上,你的数组排序也就完成了。这次你的牌堆为 5 2 0 4 1 3 ,依次向手中加牌
①摸一张5 5
②摸一张2 放5左边 2 5
③~~ 0 2 5
④~~ 0 2 4 5
⑤~~ 0 1 2 4 5
⑥~~ 0 1 2 3 4 5
Java代码实例:
4,希尔排序 我认为就是一种间隔交换 这次用个长点的栗子来让大家了解我的意图 一个拥有十个元素的数组
43 95 38 30 41 72 60 74 24 32
①首先 我以5为间隔。第一个和第六个比较,第二个和第七个比较,第三个和第八个比较......升序不变,降序则置换位置。(比如第一个43和第六个72升序不变换位置,第二个95和第七个60降序置换位置)
得到置换结果 43 6038 24 32 72 95 74 30 41
②接着我们采用3为间隔,也就是说类似第一个和第五个比较,方法同上。
得到置换结果 24 32 30 41 60 38 43 74 72 95
③接着我们采用2为间隔,得到置换结果 :
24 32 30 38 43 41 60 74 72 95
④最后以1为间隔 结果很简单 24 30 32 38 41 43 60 72 74 95
ps:大家不难发现我取间隔的方式如同下方代码一般,重复 int k/2,间隔选取其实并非唯一确定的,针对不同的数组,你们可以根据自己的经验来采用不同方式的间隔,在这里就不啰嗦了
Java代码如下
现在方案写完了 随机一个拥有十个元素的数组然后打印出排序如下 没有报错美滋滋
ps:希尔排序虽然针对大多数数组排序有较高的效率但是其稳定性让我这样的小白望而却步,建议大家写文件时用插入排序,既有效率又算法稳定
Java刚起步,个人理解,很多不到位的的地方欢迎指点批评