数据结构与算法-算法基础一

先介绍四种排序算法:插入排序、简单选择排序、冒泡排序、归并排序。

插入排序

 1     /**
 2      * 插入排序,在前k个元素有序的前提下插入arr[k],将前面有序元素依次与arr[k]比较、移动,
 3      * 最终将arr[k]插入有序元素中的合适位置,形成k+1个有序元素
 4      */
 5     @org.junit.Test
 6     public void testInsert() {
 7         for(int i=1; i<arr.length; i++) {
 8             int temp = arr[i];
 9             int j = i;
10             for(; j>0&&temp<arr[j-1]; --j) {
11                 arr[j] = arr[j - 1];
12             }
13             arr[j] = temp;
14         }
15     }

 

简单选择排序

 1     /**
 2      * 简单选择排序,每次遍历选出min与相应位置元素交换,每次遍历都可确定一个元素的最终位置
 3      */
 4     @org.junit.Test
 5     public void testSimpleSelect() {
 6         for(int i=0; i<arr.length-1; i++) {
 7             int min = i;
 8             for(int j=i+1; j<arr.length; j++) {
 9                 if (arr[min] > arr[j]) {
10                     min = j;
11                 }
12             }
13             int t = arr[min];
14             arr[min] = arr[i];
15             arr[i] = t;
16         }
17     }

冒泡排序

 1     /**
 2      * 冒泡排序,与相邻的元素比较大小并交换,每一轮比较都会确定一个元素的最终位置
 3      */
 4     @org.junit.Test
 5     public void testBubble() {
 6         for(int i=arr.length-1; i>0; i--) {
 7             for(int j=0; j<i; j++) {
 8                 if (arr[j + 1] < arr[j]) {
 9                     int t = arr[j + 1];
10                     arr[j + 1] = arr[j];
11                     arr[j] = t;
12                 }
13             }
14         }
15     }

归并排序

 1      /**
 2      * 归并排序,将n个有序序列合并成k(k<n)个有序序列,可结合其他排序使用,
 3      * 即先使用其他排序算法进行小范围排序,然后使用归并排序进行合并。
 4      */
 5         int i=0, j=0;
 6         for(; i<arr.length&&j<arr2.length;) {
 7             merged[i+j] = arr[i]>arr2[j]?arr2[j++]:arr[i++];
 8         }
 9         if (i >= arr.length) {
10             System.arraycopy(arr2, j, merged, j+i, arr2.length-j);
11         }
12         else if (j >= arr2.length) {
13             System.arraycopy(arr, i, merged, j+i, arr.length-i);
14         }        
原文地址:https://www.cnblogs.com/holoyong/p/7234723.html