从快速排序看编程语言差别

转载请标明出处:https://blog.csdn.net/u013752202/article/details/106650671
数不清的编程语言,数不清的语言特性,但万变不离其中,都能编程。下面分别用C/Python/JS/Shell四种语言来实现快速排序,孰优孰劣,看官自己评价。

一、C语言版本
首先编程语言老大哥C语言出场:

#include <stdio.h>

void printbuf(const char *tag,int *buf,int len)
{
        printf("%s:",tag);
        for(int i=0;i<len;i++){
                printf("%d ",buf[i]);
        }
        printf("\n");

}

void quickSort(int tab[],int first,int last)
{
        if(first>=last){
                return;
        }
        int left=first,right=last;
        int stdValue=tab[left];//标准值
        while(left<right){
                while(tab[right]>stdValue&&right>left){
                        right--;
                }
                tab[left]=tab[right];
                while(tab[left]<=stdValue&&left<right){
                        left++;
                }
                tab[right]=tab[left];
        }
        tab[left]=stdValue;
        quickSort(tab,first,left-1);
        quickSort(tab,left+1,last);
}

int main(int argc,char **argv)
{
        int buf[]={3,1,7,2,6,5,8,4};
        printbuf("src",buf,sizeof(buf)/sizeof(int));
        quickSort(buf,0,sizeof(buf)/sizeof(int)-1);
        printbuf("dst",buf,sizeof(buf)/sizeof(int));
        return 0;
}

运行结果:
在这里插入图片描述

参考评价:中规中矩,四平八稳

二、Python版本
Python因其丰富的第三方包,可以利用现成的轮子快速实现各种高级功能,更因为这个特性,在大数据和AI时代着实或了一把。如果不掉包,它本身的语言特点有多大魅力呢?看看它如何实现快排。
quickSort.py:

#!/usr/bin/python3

#快速排序算法
#参数:数组名和上下标
#思想:选定一个标准值,把所有比标准值大的放到右边,
#所有比标准值小的放到坐标
def quickSort(tab,first,last):
    if first>=last:
        return
    left=first
    right=last
    stdValue=tab[left];#标准值
    while left<right :
            while tab[right]>stdValue and right>left :
                    right-=1
            tab[left]=tab[right]
            while tab[left]<=stdValue and left<right :
                    left+=1
            tab[right]=tab[left]
    tab[left]=stdValue
    quickSort(tab,first,left-1)
    quickSort(tab,left+1,last)

list1=[3,1,7,2,6,5,8,4]
print("list1 before sort:",list1)

quickSort(list1,0,len(list1)-1)

print("list1 after sort :",list1)

运行:
在这里插入图片描述

作为脚本语言,Python的语法有点骚,懒得用{}来表示代码块了,用:和缩进取而代之。简直就是喜欢用空格代替缩进的猿们的噩梦。而且千万不要用各种不同的编辑器打开,缩进乱了后果也很严重。这跟shell其实差不多。
其他方面有JS的影子在里面,跟C的距离有点远。

参考评价:骚!

三、JS版本
JS是转为浏览器设计的脚本语言,也是由浏览器负责解析,IT时代的不老松。

<script>
function quickSort(tab,first,last){
    if(first>=last){
            return;
    }
    var left=first,right=last;
    var stdValue=tab[left];//标准值
    while(left<right){
            while(tab[right]>stdValue&&right>left){
                    right--;
            }
            tab[left]=tab[right];
            while(tab[left]<=stdValue&&left<right){
                    left++;
            }
            tab[right]=tab[left];
    }
    tab[left]=stdValue;
    quickSort(tab,first,left-1);
    quickSort(tab,left+1,last);
}

var list1=[3,1,7,2,6,5,8,4];
quickSort(list1,0,list1.length-1);
alert("list1 after sort: "+list1);

</script>

运行:
在这里插入图片描述

从代码实现可以看出,语法结构跟C/C++靠地很近了,不过作为脚本语言,在变量类型方面更加freedom,写惯了C/C++的老古董写写JS会觉得有点享受。当然,没有Python那么骚。

四、Shell(sh)版本
Shell是操作系统自带的脚本语言,主要用来做系统管理,Shell有很多种,就linux一种系统也有很多,最通用的还是sh,下面是sh的用法。

例程一 快速排序quickSort.sh:

#!/bin/sh

#快速排序算法
#参数:数组名和上下标
#思想:选定一个标准值,把所有比标准值大的放到右边,
#所有比标准值小的放到坐标
#shell函数不能传递指针或者引用,只能使用全局变量保存结果
quickSort(){
        ###quickSortBuf为全局变量,first,last,...为局部变量###
        quickSortBuf=($1)
        local first=$2
        local last=$3
        first=`expr $first`
        last=`expr $last`

        if [ $first -ge $last ];then
                return
        fi
        local left=$first
        local right=$last
        local stdValue=${quickSortBuf[$left]};#标准值
        #echo "${quickSortBuf[*]} left=$left,right=$right"
        while [ $left -lt $right ] ;do
                while [ ${quickSortBuf[$right]} -gt $stdValue -a  $right -gt $left ] ;do
                        right=`expr $right - 1`
                done
                quickSortBuf[$left]=${quickSortBuf[$right]}
                while [ ${quickSortBuf[$left]} -le $stdValue -a $left -lt $right ] ;do
                        left=`expr $left + 1`
                done
                quickSortBuf[$right]=${quickSortBuf[$left]}
        done
        quickSortBuf[$left]=$stdValue
        quickSort "${quickSortBuf[*]}"  "$first"       "$left - 1"
        quickSort "${quickSortBuf[*]}"  "$left + 1"  "$last"
}

list1=(3 1 7 2 6 5 8 4)

echo "list1 before sort:${list1[@]}"

quickSort "${list1[*]}" 0 "${#list1[@]} - 1"
list1=(${quickSortBuf[*]})

echo "list1 after sort :${list1[*]}"

运行:
在这里插入图片描述

这个看起来确实有点费劲了,写起来也有点费劲,主要原因吧,shell是用来做系统管理的,所以对于计算来说,确实有点弱。
转载请标明出处:https://blog.csdn.net/u013752202/article/details/106650671

四种版本的实现都在这里了,孰优孰劣自己评价吧。欢迎留言贴出其他语言的版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶落西湘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值