冒泡排序
实现原理:
相邻的两个数比较大小,如果前者小于后者,则不变,让后者与后者后面的数做比较;如果前者大于后者,则让它两换位置,用大的那个数再与后者做比较,直到比较完,那么最后一位数就是最大的,这是第一轮。第二轮同理,但是由于在第一轮就确认了最后一个是最大的数了,就可以不用管最后一个数,然后第三轮不用管倒数第二个,第四轮不用管倒数第三个。。。。。。
例:
3 4 2 6 9 5
第一轮:3小于4,不变。4大于2,4与2交换位置。4小于6,不变。6小于9,不变.9大于5,9与5交换位置。第一轮结束,得出最大值9。结果如下:
3 2 4 6 5 9
第二轮:3大于2,3与2交换位置。3小于4,不变。4小于6,不变。6大于5,6与5交换位置。确定出第二大的值6。结果如下:
2 3 4 5 6 9
。
。
。
后面接着比较大小,直到确定出最小值,也就是最前面的值。
最后结果:
2 3 4 5 6 9
代码实现:
public static void main1() {
int[] arr={3,4,2,6,9,5};
//先判断比较的轮数
for (int i = 1; i < arr.length; i++) {
//在判断比较的次数
for (int j = 0; j < arr.length-i ; j++) {
//进行前后对比大小
if (arr[j]>arr[j+1]){
//交换值
int a=arr[j];
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
//输出数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
运行结果:
2 3 4 5 6 9
选择排序
实现原理:
不停比较数的大小,记录最小值的下标,最小值的下标和第一个值的下标进行交换,即在每一轮比较中,选择当前比较数中最小的那个,放到最前面的位置。
例:
4 6 9 2 3
第一轮找到最小值2,2与第一个值4 的下标进行交换。
2 6 9 4 3
第二轮找到当前最小值3,3与第二个值6的下标进行交换。
2 3 9 4 6
第三轮找到当前最小值4,4与第三个值9的下标进行交换。
2 3 4 9 6
第四轮找到当前最小值6,6与第四个值9的下标进行交换。
2 3 4 6 9
最后就剩下最大值9,它的下标也已经被交换到了最后一个,所以无需在比较。
代码实现:
private static void main11() {
int[] arr={4,6,9,2,3};
//确定循环查找的次数
for (int i = 0; i < arr.length-1; i++) {
//默认第一个为最小值
int minIndex=i;
//划分查找的范围,从i到length-1
for (int j = i; j <= arr.length-1; j++) {
//在范围里进行打擂台比较大小
if (arr[minIndex]>arr[j]){
//找到最小值的下标
minIndex=j;
}
}
//将最小值的下标与最前面值的下标做交换,进行排序
int a=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=a;
}
//输出数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
运行结果:
2 3 4 6 9