数据结构——排序(冒泡+选择)

一:冒泡排序

基本介绍:

冒泡排序的基本思想就是:通过对等待排序的序列从前向后(从下标较小的元素开始),此次比较相邻元素的值,若发现逆序则交换,使得较大的元素逐渐从前向后移动,就像水底的气泡一样逐渐向上冒。
优化:因为在排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行交换,就说明序列有序,这时就不需用在进行以下的交换,所以,在排序过程中设置一个flag标志,来判断元素有没有进行交换,从而减少不必要的比较。

代码


  public static void Test(int[] array){
      int temp;
      boolean flage = false;
      for (int j = 0;j<array.length-1;j++) {

          for (int i = 0; i < array.length - 1 - j; i++) {
              if (array[i] > array[i + 1]) {
                  flage = true;
                  temp = array[i];
                  array[i] = array[i + 1];
                  array[i + 1] = temp;
              }
          }

          if (!flage) {
              System.out.println(Arrays.toString(array));
              return; //证明这一趟没有交换位置,那么下一趟就没有必要在进行了
          } else {
              flage = false;  //如果有交换发生,赋值
          }
      }

  }

注:

  1. 一共进行n-1次外层大循环,即数组长度-1次循环
  2. 每一趟排序的次数在逐渐的减少
  3. 如果我们发现在一趟交换中,序列没有发生一次交换,则可以提前结束冒泡排序(优化)。

二:选择排序

基本介绍:

选择排序就是从欲排序的数据中,按照指定规则选择出某一元素,在依规定交换位置后达到排序的目的。

排序思想:

假设从小到大进行排序:第一次从arr[0]-arr[n-1]中选取最小的数据,与arr[0]的数进行交换,第二次从arr[1]-arr[n-1]中选取最小数据,然后与arr[1]的数进行交换。同理第三次从arr[2]-arr[n-1]。。第四次从arr[3]-arr[n-1]。。。。一共经过n-1次寻找与交换。

代码:

 public static void selectedSort(int[] array) {

        int min;    //最小值
        int minIndex;   //最小值的下标值

        for (int j = 0;j<array.length-1;j++){
            min = array[j];
            minIndex = j;

            for (int i = j; i < array.length; i++) {
                if (min>array[i]){
                    min = array[i];
                    minIndex = i;
                }
            }
            array[minIndex] = array[j];
            array[j] = min;
        }
       System.out.println(Arrays.toString(array));
    }
    ~~~

发布了24 篇原创文章 · 获赞 5 · 访问量 2067

猜你喜欢

转载自blog.csdn.net/weixin_43288447/article/details/104145567