1.冒牌排序
1 /***
2 * 冒泡排序
3 * 一侧始终有序
4 * 两两比较,将较大的一直后移
5 */
6 public static void bubbleSort(){
7 int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,1};
8 for(int i=arr.length;i>1;i--){//这里i>1,为什么不是0 假如只有3个数a.b.c排序,a与bc比较,b与c比较,最后一个数无需比较
9 //外城循环负责遍历每一个位置
10 for(int j=0;j<i-1;j++){
11 //内层循环负责将该位置与其他未排序的位置比较
12 if(arr[j]>arr[j+1]){
13 //符合当前位置大于后一个位置的元素,交换位置
14 int temp = arr[j];
15 arr[j] = arr[j+1];
16 arr[j+1] = temp;
17 }
18 }
19 }
20 for(int i=0;i<arr.length;i++){
21 System.out.print(arr[i]+",");
22 }
23 }
2.选择排序
/***
* 选择排序
* 与冒泡排序不同的地方在于,比较完成后不会立即移动,会记录最大元素的角标,一轮计较结束后才会向后移动.
* 因为移动次数少于比较次数所以效率会比冒泡排序要好
*/
public static void selectSort(){
int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,0};
int min;
for(int i=0;i<arr.length;i++){//从左侧开始查找,默认最左侧是
min = i;//默认当前是最小值,找到最小值时替换该值
for(int j=i;j<arr.length;j++){//
if(arr[j]<arr[min]){//找到最小值时排序
min=j;
}
}
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
}
3.插入排序
1 /***
2 * 插入排序
3 * 默认一侧 总是有序的
4 * 在完全逆序的情况下,排序效率很慢
5 * 在基本有序的集合中排序效率很高
6 */
7 public static void insertSort(){
8 int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,0};
9 int in,temp;
10 for(int i=1;i<arr.length;i++){
11 in = i;
12 temp = arr[i];//设置临时变量原因:while开始第一次循环时in=i;arr[in]=arr[i],arr[in]变化,arr[i]也会随之变化.
13 while(in>0 && arr[in-1]>temp){//存在比要插入的元素大的元素存在时,后移
14 arr[in]=arr[in-1];
15 in--;
16 }
17 arr[in] =temp;
18 }
19 for(int i=0;i<arr.length;i++){
20 System.out.print(arr[i]+",");
21 }
22 }
总的来说,正常情况下冒泡算法效率最低,选择排序因为交换次数较少效率总体比冒泡排序高,插入排序可以比冒泡排序快一倍(正常情况下),比选择排序稍快。