亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

shell中的排序算法示例代碼

 更新時(shí)間:2021年12月24日 15:19:11   作者:即使不為人所道  
本文主要介紹了shell中的排序算法示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

冒泡排序法

類似旗袍上涌的動(dòng)作,會(huì)將數(shù)據(jù)在數(shù)組中從小大大或者從大到小不斷的向前移動(dòng)。

基本思想:

冒泡排序的基本思想是對(duì)比相鄰的兩個(gè)元素值,如果滿足條件就交換元素值,把較小的元素移動(dòng)到數(shù)組前面,把大的元素移動(dòng)到數(shù)組后面(也就是交換兩個(gè)元素的位置),這樣較小的元素就像氣泡一樣從底部上升到頂部。

算法思路

冒泡算法由雙層循環(huán)實(shí)現(xiàn),其中外部循環(huán)用于控制排序輪數(shù),一般為要排序的數(shù)組長(zhǎng)度減1次,因?yàn)樽詈笠淮窝h(huán)只剩下一個(gè)數(shù)組元素,不需要對(duì)比,同時(shí)數(shù)組已經(jīng)完成排序了。而內(nèi)部循環(huán)主要用于對(duì)比數(shù)組中每個(gè)相鄰元素的大小,以確定是否交換位置,對(duì)比和交換次數(shù)隨排序輪數(shù)而減少。

#!/bin/bash
array=(112 221 33 55 66 11 25 68)
length="${#array[@]}"
for ((i=1; i<=$length; i++))
do
  for ((j=1; j<=$length-$i; j++))
  do
    first=${array[$j]}
    k=$[$j+1]
    second=${array[$k]}
    if [ $first -gt $second ]
      then
        temp=$first
        array[$j]=$second
        array[$k]=$temp
    fi
  done
done

echo "new_array: ${array[@]}"

在這里插入圖片描述

直接選擇排序

與冒泡排序相比,直接選擇排序的交換次數(shù)更少,所以速度會(huì)快些。

基本思想:

將指定排序位置與其它數(shù)組元素分別對(duì)比,如果滿足條件就交換元素值,注意這里區(qū)別冒泡排序,不是交換相鄰元素,而是把滿足條件的元素與指定的排序位置交換(如從最后一個(gè)元素開始排序),這樣排序好的位置逐漸擴(kuò)大,最后整個(gè)數(shù)組都成為已排序好的格式。

#!/bin/bash
array=(77 22 99 1 23 55 11)
echo "老數(shù)組順序?yàn)?${array[@]}"
length=${#array[@]}

for ((i=1; i<=length; i++))
do
  index=0
  for ((j=1; j<=length-i; j++))
  do
    CURR=${array[$j]}
    MAX=${array[$index]}
    if [ $CURR -gt $MAX ]
      then
        index=$j
    fi
  done
  last=$[ $length - $i ]
  temp=${array[$last]}
  array[$last]=${array[$index]}
  array[$index]=$temp

done

echo "新數(shù)組的順序?yàn)?${array[@]}"

在這里插入圖片描述

在這里插入圖片描述

反轉(zhuǎn)排序

以相反的順序把原有數(shù)組的內(nèi)容重新排序。

基本思想:

把數(shù)組最后一個(gè)元素與第一個(gè)元素替換,倒數(shù)第二個(gè)元素與第二個(gè)元素替換,以此類推,直到把所有數(shù)組元素反轉(zhuǎn)替換。

#!/bin/bash
array=(1 2 3 4 5 6 7 8 9)
length=${#array[@]}
for ((i=0; i<=length/2; i++))
do
  first=${array[$i]}
  last=${array[$length-$i-1]}
  temp=$first
  array[$i]=$last
  array[$length-$i-1]=$temp
done
echo "${array[*]}"

在這里插入圖片描述

在這里插入圖片描述

直接插入算法

插入排序,又叫直接插入排序。實(shí)際中,我們玩撲克牌的時(shí)候,就用了插入排序的思想。

基本思想:

在待排序的元素中,假設(shè)前n-1個(gè)元素已有序,現(xiàn)將第n個(gè)元素插入到前面已經(jīng)排好的序列中,使得前n個(gè)元素有序。按照此法對(duì)所有元素進(jìn)行插入,直到整個(gè)序列有序。

#!/bin/bash
array=(8 2 9 44 6 28 10)
echo "原數(shù)組為 ${array[*]}"
length=${#array[@]}
for ((i=1; i<=$length; i++))
do
  for ((j=0; j<=$i; j++))
    do
      if [[ ${array[$i]} -lt ${array[$j]} ]]
        then
           temp=${array[$i]}
           array[$i]=${array[$j]}
           array[$j]=$temp
      fi
    done
done

echo "新數(shù)組為 ${array[@]}"
~
~

在這里插入圖片描述

在這里插入圖片描述

希爾算法

希爾排序也是一種插入排序,它是簡(jiǎn)單插入排序經(jīng)過(guò)改進(jìn)之后的一個(gè)更高效的版本,也稱為縮小增量排序 。

基本思想

希爾排序是把記錄按下標(biāo)的一定增量分組,對(duì)每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關(guān)鍵詞越來(lái)越多,當(dāng)增量減至1時(shí),整個(gè)文件恰被分成一組,算法便終止。

1.先選定一個(gè)小于N的整數(shù)gap作為第一增量,然后將所有距離為gap的元素分在同一組,并對(duì)每一組的元素進(jìn)行直接插入排序。然后再取一個(gè)比第一增量小的整數(shù)作為第二增量,重復(fù)上述操作…

2.當(dāng)增量的大小減到1時(shí),就相當(dāng)于整個(gè)序列被分到一組,進(jìn)行一次直接插入排序,排序完成。

gap越大,數(shù)據(jù)挪動(dòng)得越快;gap越小,數(shù)據(jù)挪動(dòng)得越慢。前期讓gap較大,可以讓數(shù)據(jù)更快得移動(dòng)到自己對(duì)應(yīng)的位置附近,減少挪動(dòng)次數(shù)。

在這里插入圖片描述

在這里插入圖片描述

#!/bin/bash
array=(8 9 1 7 2 3 5 4)
length=${#array[@]}
echo "原數(shù)組為 ${array[@]}"
#設(shè)長(zhǎng)度的一半為gap初始間隔,每次循環(huán)gap都除以2,直至gap為1結(jié)束循環(huán)
for ((gap=$length/2; gap>0; gap/=2))
do
#因?yàn)間ap為整個(gè)長(zhǎng)度的一半,所以gap到length結(jié)尾包含的元素?cái)?shù)剛好為需要進(jìn)行直接插入算法的個(gè)數(shù)
  for ((i=gap; i<$length; i++))
    do
    #設(shè)一個(gè)第三變量方便直接插入進(jìn)行交換
      temp=${array[$i]}
       #對(duì)距離為gap的元素組進(jìn)行排序,每一輪比較拿當(dāng)前輪次最后一個(gè)元素與組內(nèi)其他元素比較,將數(shù)組大的往后放
      for((j=i-gap; j>=0&&temp<${array[$j]}; j-=gap))
        do
          array[$j+$gap]=${array[$j]}
        done
      array[$j+$gap]=$temp
    done
done

echo "新的數(shù)組為 ${array[*]}"

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于shell中的排序算法示例代碼的文章就介紹到這了,更多相關(guān)shell 排序算法 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell腳本字符串和數(shù)組的使用操作方法

    shell腳本字符串和數(shù)組的使用操作方法

    這篇文章主要介紹了shell腳本字符串和數(shù)組的使用操作方法,在文中給大家提到shell將字符串分隔成數(shù)組的方法,需要的朋友可以參考下
    2019-06-06
  • shell腳本學(xué)習(xí)指南[五](Arnold Robbins & Nelson H.F. Beebe著)

    shell腳本學(xué)習(xí)指南[五](Arnold Robbins & Nelson H.F. Beebe著)

    這篇文章主要介紹了shell腳本學(xué)習(xí)指南[五](Arnold Robbins & Nelson H.F. Beebe著),需要的朋友可以參考下
    2014-02-02
  • 利用Linux Find命令快速查找文件方法

    利用Linux Find命令快速查找文件方法

    這篇文章主要介紹了利用Linux Find命令快速查找文件方法,這篇文章應(yīng)用最多的就是linux find命令進(jìn)行快速查找定位,本文給大家介紹了find 命令基本使用方法,需要的朋友可以參考下
    2022-12-12
  • linux自動(dòng)清理日志腳本分享

    linux自動(dòng)清理日志腳本分享

    這篇文章主要介紹了linux自動(dòng)清理日志腳本,主要功能是清理所有目錄的日志,根據(jù)給定日志目錄,刪除時(shí)間 結(jié)合crontab進(jìn)行清理日志
    2014-01-01
  • shell 判斷字符串是否存在數(shù)組中的實(shí)現(xiàn)示例

    shell 判斷字符串是否存在數(shù)組中的實(shí)現(xiàn)示例

    這篇文章主要介紹了shell 判斷字符串是否存在數(shù)組中的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • shell腳本命令行參數(shù)簡(jiǎn)介

    shell腳本命令行參數(shù)簡(jiǎn)介

    本文詳細(xì)介紹了shell腳本命令行參數(shù)的用法,在shell腳本中要注意命令行參數(shù)怎么使用,這也是shell編程中的重點(diǎn)內(nèi)容,有需要的朋友參考下。
    2014-04-04
  • linux中top命令詳解

    linux中top命令詳解

    top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器。本文給大家簡(jiǎn)單介紹下linux 中的top命令,感興趣的朋友一起看看吧
    2017-10-10
  • Shell獲取字符串長(zhǎng)度的多種方法總結(jié)

    Shell獲取字符串長(zhǎng)度的多種方法總結(jié)

    這篇文章主要給大家總結(jié)分享了關(guān)于Shell獲取字符串長(zhǎng)度的多種方法,包括了利用${#str}、利用awk的length方法、利用awk的NF項(xiàng)、利用wc的-L參數(shù)、利用expr的length方法以及利用expr的$str : ".*"技巧來(lái)實(shí)現(xiàn)方法示例,需要的朋友可以參考下。
    2017-08-08
  • Linux下使用tcpdump抓包的實(shí)現(xiàn)方法

    Linux下使用tcpdump抓包的實(shí)現(xiàn)方法

    tcpdump是Linux下面的一個(gè)開源的抓包工具,和Windows下面的wireshark抓包工具一樣, 支持抓取指定網(wǎng)口、指定目的地址、指定源地址、指定端口、指定協(xié)議的數(shù)據(jù)。這篇文章主要介紹了Linux下使用tcpdump抓包的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-10-10
  • crontab實(shí)現(xiàn)每隔多少天執(zhí)行一次腳本的兩種方法

    crontab實(shí)現(xiàn)每隔多少天執(zhí)行一次腳本的兩種方法

    相信大家在工作中,經(jīng)常會(huì)遇到定時(shí)執(zhí)行腳本的功能要求,或某個(gè)命令的情況。那么下面這篇文章主要給大家介紹了關(guān)于crontab實(shí)現(xiàn)每隔多少天執(zhí)行一次腳本的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-08-08

最新評(píng)論