代码改变世界

排序算法总结

2020-04-29 11:10  lulu有为  阅读(109)  评论(0编辑  收藏  举报

1.冒泡排序(升序排序)

临近的两个元素两两交换,第一轮排序将最大的数放到最后一位,第二轮排序将第二大的数放到倒数第二位。例如对{2,5,3,4,1}这个数列进行排序

public BubbleSort(int[] arr)

{

  int temp = 0;

  for(int i = 0;i < arr.Length-1; i++)

  {

    // 提前退出冒泡循环的标志位
    boolean flag = false;

    for(int j=0;j<arr.length-i-1;j++)

    {

      if(arr[j] > arr[j+1])

      {

        temp = arr[j];

        arr[j] = arr[j+1];

        arr[j+1] = arr[j];

           flag = true; // 表示有数据交换

      }

    }

 

     if (!flag) break;  // 没有数据交换,提前退出

}

2.选择排序

 public SelectSort(int[] arr)

{

  for(int i=0;i<arr.Length;i++)

  {

    for(int j=i+1; j<arr.Lenth;j++)

    {

      if(a[i]>a[j])

      {

        temp=a[i];

        a[i]=a[j];

        a[j]=temp;

      }

    }

  }

}

2.1选择排序的优化算法

 1 //选择排序
 2 public class SelectionSort {
 3     public static void main(String[] args) {
 4         int[] arr={1,3,2,45,65,33,12};
 5         System.out.println("交换之前:");
 6         for(int num:arr){
 7             System.out.print(num+" ");
 8         }        
 9         //选择排序的优化
10         for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
11             int k = i;
12             for(int j = k + 1; j < arr.length; j++){// 选最小的记录
13                 if(arr[j] < arr[k]){ 
14                     k = j; //记下目前找到的最小值所在的位置
15                 }
16             }
17             //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
18             if(i != k){  //交换a[i]和a[k]
19                 int temp = arr[i];
20                 arr[i] = arr[k];
21                 arr[k] = temp;
22             }    
23         }
24         System.out.println();
25         System.out.println("交换后:");
26         for(int num:arr){
27             System.out.print(num+" ");
28         }
29     }
30 }