• 基础的排序算法以及查找算法


    1.冒泡排序

      冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端

     1 package com.rong;
     2 
     3 public class MyClass {
     4 
     5     /**
     6      * @author 容杰龙
     7      * 排序与查找
     8      */
     9     public static void main(String[] args) {
    10         //声明并初始化数组
    11         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
    12         showArray(arrays);
    13         //冒泡排序
    14         //bubbleSort(arrays);
    15         bubbleSort2(arrays);
    16         showArray(arrays);
    17     }
    18     //这个方向》》》》》》》》》》》》比较
    19     private static void bubbleSort(int[] arrays) {
    20         for (int i = 0; i < arrays.length-1; i++) {
    21             for (int j = 0; j < arrays.length-i-1; j++) {
    22                 if(arrays[j]>arrays[j+1]){
    23                     int temp=arrays[j];
    24                     arrays[j]=arrays[j+1];
    25                     arrays[j+1]=temp;
    26                 }
    27             }
    28         }
    29     }
    30     //这个方向《《《《《《《《《《《《《《比较
    31     private static void bubbleSort2(int[] arrays) {
    32         for (int i = 0; i < arrays.length-1; i++) {
    33             for (int j = arrays.length-1; j > i; j--) {
    34                 if(arrays[j-1]>arrays[j]){
    35                     int temp=arrays[j-1];
    36                     arrays[j-1]=arrays[j];
    37                     arrays[j]=temp;
    38                 }
    39             }
    40         }
    41     }
    42     //打印数组元素
    43     private static void showArray(int[] arrays) {
    44         for (int array : arrays) {
    45             System.out.print(array+"	");
    46         }
    47         System.out.println();
    48     }
    49 }

    2.选择排序

      在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

     1 public static void main(String[] args) {
     2         //声明并初始化数组
     3         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
     4         showArray(arrays);
     5         //selectSort(arrays);
     6         selectSort2(arrays);
     7         showArray(arrays);
     8     }
     9     //这个方向>>>>>>>>>>>>>>>>比较
    10     private static void selectSort2(int[] arrays) {
    11         for (int i = 0; i < arrays.length-1; i++) {
    12             int position=i;
    13             for (int j = arrays.length-1; j >i; j--) {
    14                 if (arrays[position]>arrays[j]) {
    15                     position=j;
    16                 }
    17             }
    18             if (position!=i) {
    19                 int temp=arrays[position];
    20                 arrays[position]=arrays[i];
    21                 arrays[i]=temp;
    22             }
    23         }
    24     }
    25     //这个方向<<<<<<<<<<<<<<<<比较
    26         private static void selectSort(int[] arrays) {
    27             for (int i = 0; i < arrays.length-1; i++) {
    28                 int position=i;
    29                 for (int j = i+1; j < arrays.length; j++) {
    30                     if (arrays[position]>arrays[j]) {
    31                         position=j;
    32                     }
    33                 }
    34                 if (position!=i) {
    35                     int temp=arrays[position];
    36                     arrays[position]=arrays[i];
    37                     arrays[i]=temp;
    38                 }
    39             }
    40         }

    3.插入排序

      每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。

     1     public static void main(String[] args) {
     2         //声明并初始化数组
     3         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
     4         showArray(arrays);
     5         insertSort(arrays);
     6         showArray(arrays);
     7     }
     8     private static void insertSort(int[] arrays) {
     9         for (int i = 1; i < arrays.length; i++) {
    10             for (int j = i; j >0; j--) {
    11                 if (arrays[j-1]>arrays[j]) {
    12                     int temp=arrays[j-1];
    13                     arrays[j-1]=arrays[j];
    14                     arrays[j]=temp;
    15                 }else {
    16                     break;
    17                 }
    18             }
    19         }
    20     }

    4.快速排序

      选择一个基准元素(枢纽元素),通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分

     1     public static void main(String[] args) {
     2         //声明并初始化数组
     3         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
     4         showArray(arrays);
     5         quick(arrays);
     6         showArray(arrays);
     7     }
     8     public static int getMiddle(int[] arrays, int low, int high) {
     9         int temp = arrays[low]; // 数组的第一个作为中轴
    10         while (low < high) {
    11             while (low < high && arrays[high] > temp) {
    12                 high--;
    13             }
    14             arrays[low] = arrays[high];// 比中轴小的记录移到低端
    15             while (low < high && arrays[low] < temp) {
    16                 low++;
    17             }
    18             arrays[high] = arrays[low]; // 比中轴大的记录移到高端
    19         }
    20         arrays[low] = temp; // 中轴记录到尾
    21         return low; // 返回中轴的位置
    22     }
    23 
    24     public static void quickSort(int[] arrays, int low, int high) {
    25         if (low < high) {
    26             int middle = getMiddle(arrays, low, high); // 将numbers数组进行一分为二
    27             quickSort(arrays, low, middle - 1); // 对低字段表进行递归排序
    28             quickSort(arrays, middle + 1, high); // 对高字段表进行递归排序
    29         }
    30 
    31     }
    32 
    33     public static void quick(int[] arrays) {
    34         if (arrays.length > 0) // 查看数组是否为空
    35         {
    36             quickSort(arrays, 0, arrays.length - 1);
    37         }
    38     }

    5.顺序查找

     1     public static void main(String[] args) {
     2         //声明并初始化数组
     3         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
     4         showArray(arrays);
     5         int target=3;
     6         int index = orderSearch(arrays,target);
     7         System.out.println(index);
     8         showArray(arrays);
     9     }
    10     private static int orderSearch(int[] arrays, int target) {
    11         for (int i = 0; i < arrays.length; i++) {
    12             if (arrays[i]==target) {
    13                 return i;
    14             }
    15         }
    16         return -1;
    17     }

    6.二分查找(折半查找)

      二分查找,又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

     1     public static void main(String[] args) {
     2         //声明并初始化数组
     3         int[] arrays=new int[]{5,2,1,9,0,3,7,4,6,8};
     4         showArray(arrays);
     5         //先使数组有序,后查找
     6         quick(arrays);
     7         int target=3;
     8         //int index = binarySearch(arrays,target);
     9         int index = binarySearch2(arrays,target,0,arrays.length-1);
    10         System.out.println(index);
    11         showArray(arrays);
    12     }
    13     
    14     //非递归实现二分查找
    15     private static int binarySearch(int[] arrays, int target) {
    16         int low=0;
    17         int high=arrays.length-1;
    18         while(low<=high){
    19             int middle=(low+high)/2;
    20             if(arrays[middle]==target){
    21                 return middle;
    22             }else if(arrays[middle]>target){
    23                 high=middle-1;
    24             }else {
    25                 low=middle+1;
    26             }
    27         }
    28         return -1;
    29     }
    30     //递归实现二分查找
    31     private static int binarySearch2(int[] arrays, int target,int low,int high) {
    32         if (low<=high) {
    33             int middle=(low+high)/2;
    34             if(arrays[middle]==target){
    35                 return middle;
    36             }else if (arrays[middle]>target) {
    37                 return binarySearch2(arrays, target, low, middle-1);
    38             }else {
    39                 return binarySearch2(arrays, target, middle+1, high);
    40             }
    41         }
    42         return -1;
    43     }
  • 相关阅读:
    Python pandas检查数据中是否有NaN的几种方法
    实现one hot encode独热编码的两种方法
    深度学习框架-caffe安装-环境[Mac OSX 10.12]
    Git使用记录
    求解大于某数的下一个素数
    caffe cifar10试跑问题总结
    深度学习框架-caffe安装-Mac OSX 10.12
    常用bash命令
    vim文本编辑器
    第十八周助教总结
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/8119898.html
Copyright © 2020-2023  润新知