class ArrPaixu {
//选择排序(顺序排序)
//思路 从角标为0开始 和每个比它角标值大的数进行比较 小的数放前面,大的放后面
// 首先 既然是每个数都要进行比较 就要用到for循环,并且进行比较的数角标还在变化, 需要用到嵌套for循环
// 外层的for循环控制去比较的数 内层的for循环控制被比较的数,内层的for循环角标起码都比上个大1 需要注意的是角标不要超出界限
//
public static void ArrXuanze(int[] arr) { //定义一个函数命名为ArrXuanze,函数参数为int[] arr int类型的数组
for (int x=0; x<arr.length-1; x++) { //这个for是控制外循环的 arr.lenght-1一方面是为了防止x+1超标 另外一方面最后剩下一个数字不用在比较
for (int y=x+1; y<arr.length; y++) { //内层for循环是控制对比的数 一次往后递增
if (arr[x]>arr[y]) { //当前一个数比后一个数大时,需要调换位置
int temp = arr[x];
arr[x] = arr[y]; //这三行是调换位置的参数
arr[y] = temp;
}
}
}
}
//冒泡排序
//思路 从0开始 角标相邻的两个数比较,一次类推,最大的数跑到后面 然后还从第一个数进行比较 最后一个数字不用比较
// 外层for循环控制循环次数 内层for循环控制比较的两个数 需要注意的是角标不要超出界限
public static void ArrMaopao(int[] arr) { //定义一个函数 名称ArrMaopao 接收参数为 int类型的数组
for (int x=0; x<arr.length-1; x++) { //定义一个for循环 用来控制循环次数 arr.length-1是因为只要循环一次 就有一个当前最大数被放到最后
for (int y=0; y<arr.length-x-1; y++) { //定义一个内存for循环 用来控制比较的两个数 一次递增 也是循环一次就少比较一个数 并且数组最后一个数不需要在比较 所以出现了 arr.length-x-1
if (arr[y]>arr[y+1]) { //当前一个数比后一个数大时,需要调换位置
int temp=arr[y];
arr[y]=arr[y+1]; //这三行是调换位置的参数
arr[y+1]=temp;
}
}
}
}
//数组的遍历
public static void ArrBl(int arr[]) { //定义一个函数 起名为ArrBl 输入一个int类型的数组
System.out.print("["); //数组开始标志[
for (int x=0; x<arr.length; x++) { //for循环 让角标从0递增到最后一位
if (x!=arr.length-1) { //为了让打印数组美观,数组最后一个数字后面不带“,” 进行角标的判断
System.out.print(arr[x]+","); //当角标不是最后一个时 打印数字+“,”
}
else
System.out.print(arr[x]); //当角标为最后一个数时,打印数字
}
System.out.print("]"); //数组结束时打印]
System.out.println();
}
//定义一个主函数 用来调用其他函数
public static void main(String[] args) {
int arr[]={8,7,6,5,44,87,26,1,22,35,4,5,6}; //定义一个数组 arr
System.out.println("排序前");
ArrBl(arr); //调用遍历函数 打印数组的内容
ArrXuanze(arr); //调用选择排序 对数组进行由小到大的排序
System.out.println("选择排序后");
ArrBl(arr); //调用遍历函数 打印排列后的数组
int brr[]={8,7,6,5,44,87,26,1,22,35,4,5,6}; //定义一个数组 arr
System.out.println("排序前");
ArrBl(brr); //调用遍历函数 打印数组的内容
ArrMaopao(brr); //调用冒泡排序 对数组进行由小到大的排序
System.out.println("排序后");
ArrBl(brr); //调用遍历函数 打印排列后的数组
}
}
|
|