Java初步语法(12)之数组排序算法

数组排序算法

常用的排序算法包括三类:

  1. 冒泡排序

  2. 直接选择排序

  3. 反转排序

下边我们就先介绍一下冒泡排序

1.冒泡排序

特性:思想和实现方法简洁。

基本原理:将相邻的两个值相比较,满足条件就交换元素所在位置,将元素按顺序一个个交换,像气泡冒出一样,慢慢的浮出水面。

算法构思:冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,一般为要排序的数组长度减一;内层循环主要判断每个临近元素的大小,用以确定是否交换位置,对比和交换次数随排序的轮数减少而减少。第一轮循环将最值移到了最外层,,第二轮外层循环将对比出最值外的其他元素(最值已经确认为最大所以忽略),决出剩余元素的最值;以此为循环,最终完成排序任务后输出。
算法实现:

创建一个类,将其中的数组按照冒泡排序排列并输出,实例代码如下:

public class BubbleSort {

   public static void main(String[] args) {

     int arr[]= new int[] {3,12,34,45,55,11};

    
 BubbleSort sorter =new BubbleSort();

     sorter.sort(arr);

  }

 public void sort(int[] arr) {

  for(int i=1;i<arr.length;i++) {

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

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

            int temp=arr[j];

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

            arr[j+1]=temp;

         }

      }

  }

  showArray(arr);

}

 public void showArray(int[] arr) {

  for(int i:arr) {

     System.out.print(">"+i);

  }

  System.out.println();

}

}

运行结果如下:

在这里插入图片描述

此结果符合冒泡排序思想:将两个相邻的元素进行比较,如满足一定条件则进行交换(如判断大小或者日期前后等),每次循环都将最大(或最小)的元素排在最后,下一次循环是对数组中其他元素进行类似操作;

2.直接选择排序:

特点:
它的排序速度要比冒泡排序快一些,也是常用的排序算法。

算法构思:

将指定排序位置与其他数组元素分别对比,满足条件就交换元素。然后排序好的位置一个一个递增,直至全部排序标准;

与冒泡排序的区别:不是交换相邻元素,而是将满足条件的元素用于指定位置的排序位置交换。(用一个元素比较全部的数,先确定一个最值而后继续排序)

算法实现:

创建一个数组,将数组内的元素用直接选择排序法进行排序,示例代码如下:

public class SelectSort {



 public static void main(String[] args) {

  int arr[]=new int[] {77,33,44,66,55,22};

  SelectSort sorter=new SelectSort();

  sorter.sort(arr);

 }

 public void sort(int[]arr) {

  int index;

  for(int i=1;i<arr.length;i++) {

      index=0;

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

         if(arr[j]>arr[index]) {

            index=j;

         }

      }

      int temp=arr[arr.length-i];

      arr[arr.length-i]=arr[index];

      arr[index]=temp;

  }

  showArray(arr);

}

public void showArray(int[]arr) {

  for (int i:arr) {

      System.out.print(">"+i);

  }

  System.out.println();

 }



}

输出结果如下:

在这里插入图片描述

反转排序:

概念:以相反的顺序八原有数组的内容重新排列。

算法构思:将数组的最后一个元素与第一个元素替换,倒数第二个元素与第一个元素替换,倒数第二个元素与第二个元素替换。,因为是对数组两边的元素进行替换,所以只需要循环数组长度的半数次即可。

算法实现:

创建一个数组,将其元素进行反转排序:

public class ReverseSort {



 public static void main(String[] args) {

  int arr[]=new int[] {1,2,3,4,5,6};

  ReverseSort sorter=new ReverseSort();

  sorter.sort(arr);

 }

 public void sort(int[]arr) {

  System.out.println("原本数组元素:");

  showArray(arr);

  int temp;

  int length=arr.length;

  for(int i=0;i<length/2;i++) {

      temp=arr[i];

      arr[i]=arr[length-i-1];

      arr[length-i-1]=temp;

  }

  System.out.println("数组反转后元素:");

  showArray(arr);

 }

 public void showArray(int[]arr) {

  for(int i:arr) {

      System.out.print("\t"+i);

  }

  System.out.println();

 }

}

结果为:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kuu_ga/article/details/107907708