1.冒泡排序
思路:1.冒泡排序是通过两两比较,按顺序依次向后比较,如果比后面数大就交换位置,否则就不动,然后比较后一个数,直到比较完倒数第二个数,才结束一轮。
举例:int [ ] a={15,2,25,6,};
第一轮: 2 15 25 6 2 15 25 6 2 15 6 25
第二轮: 2 15 6 25 2 6 15 25
第三轮: 2 6 15 25
可以看出 每一轮 比较的次数都会较上一轮少1,所以不用再去比较,接下来就是代码的书写了,我们可以考虑嵌套的for循环,外层循环控制比较的轮数,内层循环控制比较的次数。
package com.test;
import java.util.Collections;
public class Sort {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
f1(a);//
}
private static void f1(int[] a) {
System.out.println("未排序的数组为:");
for (int i : a) {
System.out.print(i+" ");
}
int l=a.length;
for (int i = 0; i < l; i++) {//外层循环控制循环的轮数
for (int j = 0; j < l-i-1; j++) {//内存循环来控制每轮比较以及交换的次数
if (a[j]>a[j+1]) {
a[j]=a[j]^a[j+1];
a[j+1]=a[j]^a[j+1];
a[j]=a[j]^a[j+1];
}
}
}
System.out.println();
System.out.println("排序后的数组:");
for (int i : a) {
System.out.print(i+" ");
}
}
}
2.选择排序
1.思路,选择排序的思路是每一轮找出最小值,与每一轮的起始位置进行交换,简而言之,就是找到最小值,放到最前端。
2.代码,既然要找到最小值,那么我们的思路仍然是外层循环控制循环的轮数,内存循环要找出最小值的下标,然后存起来,待内层循环结束后,交换位置。话不多说,下面上代码:
package com.test;
import java.util.Collections;
public class Sort1 {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
f2(a);//选择排序
}
private static void f2(int[] a) {
System.out.println("未排序的数组为:");
for (int i : a) {
System.out.print(i+" ");
}
int l=a.length;
for (int i = 0; i < l; i++) {//外层循环控制轮数
int min=i;//最小值的下标
for (int j = min; j < l; j++) {//循环找出此轮最小值
if (a[j]<a[min]) {
min=j;//得到此轮最小值的下标
}
}
if(i != min){ //在内层循环结束后,交换此轮最小值与起始值的位置
a[i]=a[i]^a[min];
a[min]=a[i]^a[min];
a[i]=a[i]^a[min];
}
}
System.out.println();
System.out.println("排序过后的数组为");
for (int m : a) {
System.out.print(m+" ");
}
}
3.插入排序
1.思路:插入排序是每一轮的起始值与前面的排序区进行比较,以插入到合适的位置。
2.代码:依旧是外层控制轮数,内层循环将每轮起始值与前面的排序区进行比较,进行判断,不能交换就停下,这里因为前面是有序的,所以可以直接停下,而不用继续比较,不同于选择排序。下面上代码:
package com.test;
public class Sort1 {
public static void main(String[] args) {
int [] a= {85,25,35,15,5,95,45,65};
f3(a);//插入排序
}
private static void f3(int[] a) {
System.out.println("未排序的数组为:");
for (int i : a) {
System.out.print(i+" ");
}
int l=a.length;
for (int i = 0; i < l-1; i++) {//控制轮数
for (int j= i+1; j >0; j--) {
if (a[j]<a[j-1]) {//交换
a[j]=a[j]^a[j-1];
a[j-1]=a[j]^a[j-1];
a[j]=a[j]^a[j-1];
}
}
}
System.out.println("");
System.out.println("排序过后的数组为:");
for (int i : a) {
System.out.print(i+" ");
}
}
}