[2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序

冒泡排序

 1 package ch_02;
 2 
 3 public class BubbleSort {
 4  public static void sort(long[] arr) {
 5      long temp = 0;
 6      for(int i = 0; i < arr.length-1; i++) {
 7          // 外层的循环从前向后
 8          for (int j = arr.length - 1; j > i; j--) {
 9              // 内层的循环从后向前, 判断序号靠前的元素是否小于序号靠后的元素
10              // 如果不是, 交换位置
11              if (arr[j - 1] > arr[j]) {
12                  //进行交换
13                  temp = arr[j];
14                  arr[j] = arr[j-1];
15                  arr[j-1] = temp;
16              }
17          }
18      }
19  }
20 }

通过两重循环来实现冒泡排序法, 外层的for循环用来从头开始遍历数组内的所有的元素. 内循环从数组的最后的一个元素开始便利, 每次遍历的次数等于元素总数减去排好的元素的数量, 这通过for 循环内的 j > i; 条件来实现, 每当我们正确的排好一个元素, i就加1. 内层的if判断语句实现的功能是如果在这一次的循环中, 前一个元素的值比后一个元素的值大, 那么就在if语句内调换连个元素的值. 每一次的循环可以确保一个元素被正确的排好位置. 在最坏的情况下, 一个数组需要循环elements-1次, elements表示元素的总量.

选择排序SelectSort

 1 package ch_02;
 2 
 3 public class SelectionSort {
 4     public static void sort(long[] arr) {
 5         int k = 0;
 6         long temp = 0;
 7         for (int i = 0; i < arr.length - 1; i++) {
 8             // 这一步和冒泡排序是相同的, 都是从最前开始排序
 9             k = i;
10             for (int j = i; j < arr.length; j++) {
11                 if (arr[j] < arr[k]) {
12                     // 确保k是最小的元素的下标
13                     k = j;
14                 }
15             }
16             temp = arr[i];
17             arr[i] = arr[k];
18             arr[k] = temp;
19         }
20     }
21 }

  最外层和冒泡排序法是相同的, 从下标为0的元素开始遍历全部的数组元素. 内部的循环和冒泡排序法就有很大的不同了, 内循环从起始位置开始, 通过j变量遍历之后的所有的元素, 通过k变量使得k变量一直都是数值最小的元素的下标, 当便利完所有的元素之后, 将k所指的元素的值和最外层的i所指的元素的值交换, 从而实现一位元素的排序, 然后i++, 开始排序下一位, 如此循环, 直到所有位都完成排序. 

插入排序

 1 package ch_02;
 2 
 3 public class Insertsort {
 4     public static void sort(long[] arr) {
 5         long tmp = 0;
 6         
 7         for (int i = 1; i < arr.length; i++) {
 8             // 从一开始设置插入点tmp.
 9             tmp = arr[i];
10             int j = i;
11             while(j > 0 && arr[j] >= tmp) {  12                 // 从后向前移动, 直到数组的最前方或者是遇到一个比后面的数都小的数.
13                 arr[j] = arr[j - 1];
14                 j--;
15             }
16             arr[j] = tmp;
17         }
18     }
19 }

我自己手写的例子: 20 1 5 8 7

我手工的一步一步的写出了过程.

猜你喜欢

转载自www.cnblogs.com/huangZ-H/p/9976320.html
今日推荐