分享
  1. 首页
  2. 文章

Java、Scala、Go以相同方式实现快速排序代码量比较

i6448038 · · 2392 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在程序猿的世界,语言之争是个永恒的话题,在此,我想说:让争论来的更猛烈些吧大笑。

在此,我要用相同的方式实现快速排序。首先,我们简单的回顾一下什么是快速排序。

快速排序:

快排的精髓在于"分治"。注意:这是两个方面,"分"讲的是利用所选的元素(往往是第一个元素,在此命名为Key),以Key为分水岭将列表分为:比Key元素大的和比Key元素小的两部分;"治"讲的是将分开的两部分以同样的方式("分"的方式)继续排序,直至完全排完。如下图所示:


很显然,用"递归"的方式是很不错的。下面,每个语言用最最简洁的方式实现这个排序,然后比较一下代码量:

给出的需要排序的序列是:6、2、7、3、9、4、8、5

JAVA:

private void setQuickSort(int[] array,int left,int right) {
int i = left;
int j= right;
int key = array[left];
int keyFlag = left;
while (i < j) {
while (i < j&&key <= array[j]) {
j--;
}
if(i < j){
int tmp = array[j];
array[j] = array[i];
array[i] = tmp;
keyFlag = j;
}
while (i < j&&key >= array[i]) {
i++;
}
if(i < j){
int tmp1 = array[j];
array[j] = array[i];
array[i] = tmp1;
keyFlag = i;
}
}
if(keyFlag>left+1){
setQuickSort(array, left, keyFlag - 1);
}
if(keyFlag<right-1){
setQuickSort(array,keyFlag+1,right);
}
}
}

Go:

func setQuickSort(array *[9]int, left, right int) {
i, j := left, right
m := left
key := array[left]
for i < j {
for i < j && key <= array[j] {
j--
}
if i < j {
array[i], array[j] = array[j], array[i]
m = j
}
for i < j && key >= array[i] {
i++
}
if i < j {
array[i], array[j] = array[j], array[i]
m = i
}
}
if m > left+1 {
setQuickSort(array, left, m-1)
}
if m < right-1 {
setQuickSort(array, m+1, right)
}
}

Scala:

def quickSort(array: List[Int]): List[Int] = {
if (array.isEmpty) array
else
quickSort(array.filter(_<array.head)):::array.head::quickSort(array.filter(_>array.head))
}


Scala 完胜!哈哈,请不要喷我!


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:i6448038

查看原文:Java、Scala、Go以相同方式实现快速排序代码量比较

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2392 次点击
上一篇:GO relate
1 回复 | 直到 2025年05月11日 10:06:57
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏