陣列基本操作及冒泡演算法、直接選擇排序
文章目錄
陣列
一、陣列定義方法
方法一:
陣列名=(value0 value1 value2 …)
方法二:
陣列名=([0]=value [1]=value [2]=value …)
方法三:
列表名=“value0 value1 value2 …”
陣列名=($列表名)
方法四:
陣列名[0]=“value”
陣列名[1]=“value”
陣列名[2]="value"
二、陣列包括的資料型別
數值型別
字元型別(字串):使用" "或’ '定義,防止元素當中有空格,元素按空格分割
三、獲取陣列長度
abc=(1 2 3 4 5 6 7 8) #定義陣列
echo $(#abc[*])或者echo $(#abc[@]) #獲取陣列長度
1、讀取某索引賦值
abc=(1 2 3 4 5 6 7 8)
echo ${abc[0]}
echo ${abc[1]}
echo ${abc[5]
四、陣列遍歷
[root@promote d3]#vim 3.sh
#!/bin/bash
arr=(5 4 3 2 1)
for i in ${arr[@]}
do
echo $i
done
五、陣列切片
arry=(1 2 3 4 5 6)
echo ${arry[*]}
echo ${arry[@]} #輸出整個陣列,此處*與@相同
echo ${arry[@]:0:2} #獲取 ${陣列名[@或*]:起始位置:長度} 的值
echo ${arry[@]:2:2}
echo ${arry[@]:3:4}
六、陣列替換
方法一:單個替換
arry=(1 2 3 4 5 6)
echo ${arry[*]}
arry[0]=66
echo ${arry[*]}
方法二:多個替換臨時替換
echo ${arry[*]/6/77} #臨時替換
echo ${arry[*]} #原來的值不變
方法三:多個替換,永久替換
arrp=${arry[*]/6/88}
arry=($arrp)
echo ${arry[*]}
七、陣列刪除
echo ${arry[*]}
unset arry #刪除整個陣列
echo ${arry[*]}
arr=(1 2 3 4 5 6 7)
echo ${arr[*]}
unset arr[5] #刪除陣列中選擇索引對應的元素
echo ${arr[*]}
echo ${arr[6]}
八、陣列追加元素
方法一:單個新增
arr=(1 2 3 4 5 6 7)
echo ${arr[6]}
arr[7]=8
arr[8]=9
echo ${arr[*]}
方法二:在不進行任何刪減時,索引最大值,就是元素長度減一
方法三:直接獲取源陣列的全部元素再加上新要新增的元素,一併重新賦予該陣列,重新重新整理定義索引
arr=(1 2 3 4 5 6 7)
echo ${arr[*]}
unset arr[2]
unset arr[4]
echo ${arr[*]}
echo ${arr[6]}
echo ${arr[5]}
echo ${arr[4]}
echo ${arr[2]}
arr=("${arr[@]}" 8 9 10)
echo ${arr[*]}
echo ${arr[4]}
echo ${arr[2]}
雙引號不能省略,否則陣列中存在包含空格的元素時會按空格將元素拆分成多個
不能將“@”替換為“*”,如果替換為“* ”,不加雙引號時與“@”的表現一致,加雙引號時,會將陣列array_name中的所有元素作為一個元素新增到陣列中
方法四:待新增元素必須用“()”包圍起來,並且多個元素用空格分隔
arr+=(10 11 12 ...)
九、向函式傳陣列引數
test2() {
newarrary=($(echo $@))
echo "新陣列的值為:${newarrary[*]}"
}
array=(3 2 1 4 5)
echo "原始陣列的值為:${array[*]}"
test2 ${array[*]}
十、排序演算法
1、氣泡排序演算法
類似氣泡上湧的動作,會將資料在陣列中從小到大或者從大到小不斷的向前移動。
基本思想:
氣泡排序的基本思想是對比相鄰的兩個元素值,如果滿足條件就交換元素值,把較小的元素移動到陣列前面,把大的元素移動到陣列後面(也就是交換兩個元素的位置),這樣較小的元素就像氣泡一樣從底部上升到頂部。
演算法思路:
冒泡演算法由雙層迴圈實現,其中外部迴圈用於控制排序輪數,一般為要排序的陣列長度減1次,因為最後一次迴圈只剩下一個陣列元素,不需要對比,同時陣列已經完成排序了。而內部迴圈主要用於對比陣列中每個相鄰元素的大小,以確定是否交換位置,對比和交換次數隨排序輪數而減少。
#!/bin/bash
array=(60 20 30 50 10 40)
echo "原陣列元素順序為:${array[*]}"
for ((i=1;i<${#array[*]};i++))
do
for ((a=0;a<${#array[*]}-i;a++))
do
if [ ${array[$a]} -gt ${array[$a+1]} ]
then
temp=${array[$a]}
array[$a]=${array[$a+1]}
array[$a+1]=$temp
fi
done
done
echo "經過氣泡排序後,陣列順序為:${array[*]}"
2、直接選擇排序
與氣泡排序相比,直接選擇排序的交換次數更少,所以速度更快。
基本思想:
將指定排序位置與其他陣列元素分別對比,如果滿足條件就交換元素值,注意這裡區別氣泡排序,不是交換相鄰元素,而是把滿足條件的元素與指定的排序位置交換(如從最後一個元素開始排序),這樣排序好的位置逐漸擴大,最後整個陣列都成為已排序好的格式。
#!/bin/bash
array=(7 6 3 2 1 4)
echo "原陣列元素順序為:${array[*]}"
long=${#array[*]}
for ((i=1;i<$long;i++))
do
index=0
for ((a=1;a<=$long-$i;a++))
do
if [ ${array[$a]} -gt ${array[$index]} ]
then
index=$a
fi
last=$[$long-$i]
temp=${array[$last]}
array[$last]=${array[$index]}
array[$index]=$temp
done
done
echo "經過直接排序後陣列元素順序為:${array[*]}"
相關文章
- 陣列選擇排序陣列排序
- (三)陣列的定義、折半查詢、排序(選擇和冒泡)陣列排序
- 《演算法圖解》NOTE 2 陣列、連結串列及選擇排序演算法圖解陣列排序
- 常見的三種排序演算法(選擇,冒泡,計數)排序演算法
- 資料結構和演算法:03.冒泡、選擇排序資料結構演算法排序
- 排序法:選擇、冒泡、插入和快排排序
- C語言排序 冒泡 選擇 快排C語言排序
- 最簡單易懂的三種排序演算法:冒泡、選擇、插入排序演算法
- 選擇排序-演算法及優化排序演算法優化
- 單連結串列的排序(插入,選擇,冒泡)排序
- iOS開發·必會的演算法操作:字串陣列排序+模型物件陣列排序iOS演算法字串陣列排序模型物件
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 陣列的基本操作陣列
- 排序演算法:選擇排序排序演算法
- 排序演算法__選擇排序排序演算法
- 基礎排序(冒泡、選擇、插入)學習筆記排序筆記
- 陣列及陣列物件操作 ----------包括排序,去重,合併,翻轉等陣列物件排序
- 初識Java(Java陣列-陣列的基本操作)Java陣列
- PHP 排序演算法之選擇排序PHP排序演算法
- Python排序演算法之 選擇排序Python排序演算法
- 排序演算法入門:選擇排序排序演算法
- 排序演算法之「選擇排序(SelectionSort) 」排序演算法
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- C語言:排列陣列的三種方法:冒泡法、選擇法、插入法C語言陣列
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 從零開始學資料結構和演算法(一)冒泡與選擇排序資料結構演算法排序
- 反射,hashlib模組,正則匹配,冒泡,選擇,插入排序反射排序
- 堆的基本操作及堆排序排序
- 常用演算法-選擇排序演算法排序
- java選擇排序演算法Java排序演算法
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 演算法基礎:排序演算法:選擇排序演算法排序
- 陣列的基本演算法陣列演算法
- 排序演算法入門之「選擇排序」排序演算法
- 樹狀陣列3種基本操作陣列
- 深入淺出的排序演算法-選擇排序排序演算法
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.9):陣列(陣列基本使用、陣列的迴圈、陣列拷貝、陣列排序、多維陣列)Java陣列排序
- 圖解選擇排序及演算法優化(Java實現)圖解排序演算法優化Java