java实现的3种排序方式,包括冒泡、选择、插入
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 }
总的来说,正常情况下冒泡算法效率最低,选择排序因为交换次数较少效率总体比冒泡排序高,插入排序可以比冒泡排序快一倍(正常情况下),比选择排序稍快。

浙公网安备 33010602011771号