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


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

    插入排序

     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         }        
  • 相关阅读:
    C#中虚方法与抽象方法的区别
    关于计算同一个用户购买日期间隔查询语句
    pandas 讲数据分组之后保留前N行方法
    关于Mysql隐式转化及注意事项与cast函数运用
    Mysql 去重
    记一个pandas 分组之后.head()返回的数据问题
    Failed to introspect Class xxxx
    golang 推荐学习记录
    Java内存区域
    Struts2中采用Json返回List对象数据为空解决方案
  • 原文地址:https://www.cnblogs.com/holoyong/p/7234723.html
Copyright © 2020-2023  润新知