하나, 버블 정렬
거품의 급증과 유사하게 데이터는 어레이에서 계속해서 소형에서 대형으로 또는 대형에서 소형으로 이동합니다.
기본 개념 :
버블 정렬의 기본 개념은 인접한 두 요소의 값을 비교하는 것입니다. 조건이 충족되면 요소 값이 교환되고 작은 요소가 배열의 맨 앞으로 이동합니다. 큰 요소는 배열의 뒤쪽으로 이동하여 (즉, 각 요소의 위치를 두 개 교환) 작은 요소가 거품처럼 아래쪽에서 위쪽으로 올라갑니다.
알고리즘 아이디어 :
버블 링 알고리즘은 이중 레이어 루프로 구현되며, 여기서 외부 루프는 정렬 라운드 수를 제어하는 데 사용됩니다. 일반적으로 정렬 할 배열의 길이는 하나의 배열 만 있기 때문에 1 씩 줄어 듭니다. 요소가 마지막 루프에 남아 있으며 비교가 필요하지 않습니다. 정렬이 완료되었습니다. 내부 루프는 배열에서 인접한 각 요소의 크기를 비교하여 위치를 교환할지 여부를 결정하는 데 주로 사용되며, 정렬 라운드 수에 따라 비교 및 교환 횟수가 감소합니다.
#!/bin/bash
#冒泡排序
arr=(10 44 55 24 33 78 11) #这里是我自己定义得数组arr
length=${#arr[@]}
echo "原数组为:${arr[@]} "
for((i=1;i<${#arr[@]};i++)) #外部循环,控制轮次
do
for ((j=0;j<${#arr[@]}-$i;j++)) #内部循环,控制每轮比较次数
do
if [ ${arr[$j]} -gt ${arr[$j+1]} ] #对每轮从头开始得相邻两个数进行比较,小的上浮(放前面),大的下沉(放后面替换位置)
then
temp=${arr[$j]} #这里把前一个定义给一个变量temp
arr[$j]=${arr[$j+1]} #如果前一个大于后一个,则两两交换位置
arr[$j+1]=$temp
fi
done
done
echo "冒泡排序完得数组为:${arr[@]} "
성공!
둘째, 직접 정렬
버블 정렬에 비해 직접 선택 정렬은 교환 수가 적기 때문에 더 빠릅니다.
기본 개념 :
지정된 정렬 위치를 다른 배열 요소와 개별적으로 비교합니다. 조건이 충족되면 요소 값이 교환됩니다. 여기서 버블 정렬이 구별됩니다. 인접한 요소를 교환하는 대신 조건을 충족하는 요소가 교환됩니다. 지정된 정렬 위치 (예 : 마지막 요소에서 정렬)를 사용하여 정렬 된 위치가 점차 확장되고 마지막으로 전체 배열이 정렬 된 형식이됩니다.
#!/bin/bash
#直接排序
arr=(10 44 55 24 33 78 11)
echo "原先得数组为:${arr[@]} "
length=${#arr[@]}
for ((i=1;i<$length;i++))
do
index=0 #定义一个index变量,用来接收
for ((j=1;j<=$length-i;j++)) #这里我用的是<=因为我下面用的是 -lt 来判断的,所以这里需要<=
do
if [ ${arr[$index]} -lt ${arr[$j]} ] #这里我用的是小于
then
index=$j
fi
last=$[ $length - $i ]
temp=${arr[$last]}
arr[$last]=${arr[$index]}
arr[$index]=$temp
done
done
echo "直接排序完得数组为:${arr[@]} "
세, 역 정렬
원래 배열의 내용을 역순으로 재정렬
기본 아이디어 :
배열의 마지막 요소를 첫 번째 요소로 바꿉니다. 두 번째 요소는 모든 배열 요소가 반전되고 대체 될 때까지 두 번째 요소로 대체됩니다.
#!/bin/bash
#直接排序
arr=(10 44 55 24 33 78 11)
echo "原先得数组为:${arr[@]} "
length=${#arr[@]}
for ((i=1;i<$length;i++))
do
index=0
for ((j=1;j<=$length-i;j++))
do
if [ ${arr[$index]} -lt ${arr[$j]} ]
then
index=$j
fi
last=$[ $length - $i ] #从这里开始,以下就是首尾替换。
temp=${arr[$last]}
arr[$last]=${arr[$index]}
arr[$index]=$temp
done
done
echo "直接排序完得数组为:${arr[@]} "