请问如下排序到底是什么排序算法?

2016-06-20 23:32:19 +08:00
 Jakesoft
$len = count($arr);

for ($i = 0; $i < $len; $i++) {
    for ($j = 0; $j < $i; $j++) {
        if ($arr[$i] < $arr[$j]) {
            $temp = $arr[$i];
            $arr[$i] = $arr[$j];
            $arr[$j] = $temp;
        }
    }
}

感觉不像冒泡排序:一开始就得到最大值或者最小值

也不像选择排序,身边找不到人解答,

就当破事水来一发咯。

3630 次点击
所在节点    PHP
34 条回复
Mirana
2016-06-20 23:41:01 +08:00
冒泡啊。。。
Jakesoft
2016-06-20 23:44:16 +08:00
@Mirana 冒泡不是会在开始得到最大或者最小值吗?这个好像没有啊
hxtheone
2016-06-20 23:50:02 +08:00
@Jakesoft 冒泡的最大值或最小值是在逐次交换中得到的吧? 开始得到最大或最小的不是堆排吗?
ChiangDi
2016-06-20 23:52:13 +08:00
插入排序吧,依次找到剩余的最大的插到前面,就跟打牌时那个插法一样。
hinkal
2016-06-20 23:53:54 +08:00
这是插入排序吧
lechain
2016-06-20 23:55:18 +08:00
冒泡…鉴定完毕
hinkal
2016-06-20 23:56:13 +08:00
参见维基百科插入排序 java 实现的那一段和这个 php 写的代码结构一样
public static void insertion_sort( int[] arr ) {
for( int i=0; i<arr.length-1; i++ ) {
for( int j=i+1; j>0; j-- ) {
if( arr[j-1] <= arr[j] )
break;
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
swuzjb
2016-06-20 23:56:17 +08:00
标准的冒泡啊
skydiver
2016-06-20 23:56:27 +08:00
明显是插入排序。冒泡只会交换相邻的。
skydiver
2016-06-20 23:57:02 +08:00
不知道为什么这么多人认为是冒泡,难道是看到双层循环就说是冒泡?
swuzjb
2016-06-20 23:57:54 +08:00
插入排序 冒泡的第二个循环 不是 0 到 i
NightVermouth
2016-06-20 23:58:44 +08:00
插入排序
pupboss
2016-06-21 00:06:29 +08:00
插入排序,在排列好的几个数里面,后面新的数只需要比最靠左边那个大,就可以插到他后面
pupboss
2016-06-21 00:10:03 +08:00
平时大家谈起算法,一个比一个看着牛逼,怎么遇到这种问题一个个的全都懵逼了
best1a
2016-06-21 00:14:20 +08:00
少了个 break ,所以看起来比较古怪
Jakesoft
2016-06-21 00:18:30 +08:00
@pupboss 我用几个数画了一下发现这不是一个很好的排序,有些比较完全不必要,比如前面是 3 , 4 , 8 ,第四个数是 2 ,于是会用 2 (这个数就是 arr[3])跟前面的数都进行比较,如果比 2 大就交换位置,于是就是 2,4,8,3 ,然后还有两个交换,其实没必要,直接把 2 放在 3 的前面其实可以了,(我算法不是很熟,所以才敢发帖出来问各位)

ps: 虽然发现不是很好的算法,但是感觉代码是不是最简单的...
Jakesoft
2016-06-21 00:21:02 +08:00
像是一个劣质的插入排序...
hinkal
2016-06-21 00:23:06 +08:00
@Jakesoft 你说的无用比较确实存在。但是这样代码简洁,适合用于表述插入排序的一般写法。
best1a
2016-06-21 00:25:38 +08:00
- -啊,不对,不是少了个 break ,这东西是把大的往后挤,所以多了很多无用的比较
LukeXuan
2016-06-21 00:40:38 +08:00
插排…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/287163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX