day13Java-常用对象Array05-数组高级01
程序员文章站
2022-05-09 13:15:55
...
常用对象Array05-数组高级
一定要注意外循环是控制循环次数,内循环是控制数组中的元素。切记切记…
因为时间关系我只写了的冒泡和选择排序,后续我会加上其他算法排序。
冒泡排序
数组排序之冒泡排序:
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
通过代码分析
// 第一次比较
// arr.length - 1是为了防止数据越界
// arr.length - 1 - 0是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 0; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第一次比较后:");
arrToString(arr);
// 第二次比较
// arr.length - 1是为了防止数据越界
// arr.length - 1 - 1是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 1; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第二次比较后:");
arrToString(arr);
// 第三次比较
// arr.length - 1是为了防止数据越界
// arr.length - 1 - 2是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 2; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第三次比较后:");
arrToString(arr);
// 第四次比较
// arr.length - 1是为了防止数据越界
// arr.length - 1 - 3是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 3; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第四次比较后:");
arrToString(arr);
代码重复度太高使用循环改进
冒泡排序具体代码演示
public class BubbleArraySort {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24, 69, 80, 57, 13};
//打印没有排序的
System.out.println("没有排序"+arrToString(arr));
//调用冒泡排序
int[] arr1 = bubbleSort(arr);
String s = arrToString(arr1);
System.out.println("排序之后"+s);
}
//冒泡排序
public static int[] bubbleSort(int[] arr) {
//arr.length-1:是防止索引越界
for (int y = 0; y < arr.length - 1; y++) {
for (int x = 0; x < arr.length - 1 - y; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
}
return arr;
}
//toString方法
public static String arrToString(int[] arr) {
String s="[";
for (int x = 0; x <arr.length ; x++) {
if(x==arr.length-1) {
s+=arr[x]+"]";
}else{
s+=arr[x]+",";
}
}
return s;
}
}
冒泡排序图解
选择排序
数组排序之选择排序:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
通过代码分析
// 第一次
int x = 0;
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
System.out.println("第一次比较后:");
arrToString(arr);
// 第二次
x = 1;
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
System.out.println("第二次比较后:");
arrToString(arr);
// 第三次
x = 2;
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
System.out.println("第三次比较后:");
arrToString(arr);
// 第四次
x = 3;
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
System.out.println("第四次比较后:");
arrToString(arr);
代码重复度太高使用循环改进
选择排序代码演示
public class SelectArraySort {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24, 69, 80, 57, 13};
System.out.println("排序之前" + arrToString(arr));
//调用选择拍讯
int[] arr1 = arrToSelectSort(arr);
String s = arrToString(arr1);
System.out.println("排序之后"+s );
}
//选择排序
public static int[] arrToSelectSort(int[] arr) {
for (int y = 0; y < arr.length - 1; y++) {
for (int x =y+1; x < arr.length; x++) {
if (arr[y] > arr[x]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
return arr;
}
//toString方法
public static String arrToString(int[] arr) {
String s = "[";
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
s += arr[x] + "]";
} else {
s += arr[x] + ",";
}
}
return s;
}
}
结果:
排序之前[24,69,80,57,13]
排序之后[13,24,57,69,80]
选择排序图解
下一篇: day09Java-多态01