数组排序(使用tr、sort、for)
- 使用tr命令将数组内每个元素之间的空格替换为换行符;
- 之后使用sort命令按从小到大重新排序;
- 最后使用for循环遍历排序后的元素
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "原数组的顺序为:${arr[@]}"
#将每个元素之间的空格替换为换行符,然后重新排序
list=$(echo ${arr[@]} | tr ' ' '\n' | sort -n)
a=0
for i in $list
do
arr[$a]=$i
let a++
done
echo "排序后的数组顺序为:${arr[@]}"
冒泡排序的原理:
每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。
而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。
冒泡排序
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "原数组顺序为:${arr[@]}"
#获取数组的长度
length=${#arr[@]}
#使用冒泡排序 #定义比较的轮数,比较轮数为数组长度减1,从1开始。
for ((i=1;i<$length;i++))
do
#对比相邻元素,确定元素的位置,较大的值往右放,每轮的比较次数会随着比较轮数的增加而减少。
每轮比较次数=数组长度-轮数
#变量以左边元素为参数
for ((j=0;j<$length-i;j++))
do
#定义左边元素的值 l
eft=${arr[$j]}
#定义右边元素的值
k=$[$j+1]
right=${arr[$k]}
#比较两边元素的值,如果左边的值大于右边的值,两个元素就互换
if [ $left -gt $right ]
then
#使用临时变量temp保存左边元素的值
tmp=$left #将右边元素的值赋给左边元素
arr[$j]=$right #将原来的左边元素的值(保存在临时变量temp中)赋给右边元素 arr[$k]=$tmp
fi
done
done
echo "排序后数组的顺序为:${arr[@]}"
直接选择排序
void selectSort(int a[],int n){
for(int i=1;i<=n-1;i++){//进行n-1趟选择
int index=i;
for(int j=i+1;j<=n;j++)//从无序区选取最小的记录
if(a[index]>a[j])
index=j;
if(index!=i)
swap(a[i],a[index]);
}
}
反转排序
//反转排序
public class 反转排序 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] array = {10,20,30,40,50,60};
反转排序 sorter = new 反转排序();
sorter.sort(array);
}
public void sort(int[] array) {
System.out.print("数组原有内容:");
showArray(array);//输出原有数组
int temp;
int len =array.length;
for(int i=0;i<len/2;i++) {
temp=array[i];
array[i]=array[len-1-i];
array[len-1-i]=temp;
}
System.out.print("数组反转后内容:");
showArray(array);
}
public void showArray(int[] array) {
for(int i:array) {
System.out.print("\t"+i);
}
System.out.print(" ");
}
}