• java三种排序,冒泡,插入,选择


    1.冒泡排序原理

      比较两个相邻的元素,将值大的元素交换至右端

     1  int a[] = new int[]{2, 6, 45, 54, 6, 8, 9, 12, 45, 6546, 13, 134, 13, 156, 48, 2};
     2 
     3         int min;
     4         int x = 0;
     5 
     6         for (int i = 0; i < a.length; i++) {
     7             for (int j = 0; j < a.length - 1 - i; j++) {
     8                 x++;
     9                 if (a[j] > a[j + 1]) {
    10                     min = a[j + 1];
    11                     a[j + 1] = a[j];
    12                     a[j] = min;
    13 
    14                 }
    15                 System.out.println(x + "次");
    16             }
    17         }
    18         for (int i = 0; i < a.length; i++) {
    19             System.out.print(a[i] + ",");
    20 
    21         }
    22         System.out.println();

    2.插入排序

        插入排序类似于洗牌的过程,前面的数组默认是正序的,然后从后面的数组中开始抽牌插入到前面的数组中,如果比前面的大直接就是当前位置,如果比前面的一个小,

    继续向前比较,直到找到比前面的大的,插入到当前位置

       但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。也就是代码18行

      代码实现:

     1   /**
     2          * 插入排序
     3          */
     4         int b[] = new int[]{2, 6, 45, 54, 6, 8, 9, 12, 45, 6546, 13, 134, 13, 156, 48, 2};
     5 
     6 
     7         int i, j;
     8         int n = b.length;
     9         int target;
    10 
    11         //假定第一个元素被放到了正确的位置上
    12         //这样,仅需遍历1 - n-1
    13         for (i = 1; i < n; i++) {
    14             j = i;
    15             target = b[i];
    16 
    17             while (j > 0 && target < b[j - 1]) {
    18                 b[j] = b[j - 1];
    19                 //b[j-1]=target;
    20                 j--;
    21             }
    22 
    23 
    24             b[j] = target;
    25         }
    26         for (int i1 = 0; i1 < b.length; i1++) {
    27             System.out.print(b[i1] + ",");
    28         }

    3.选择排序

      选择排序就是进行n-1轮比较 每轮比较至多交换一次 先设最小值为本轮比较初始值 然后比这个值小的就变为最小值,
    最后那个肯定是本轮最小值的坐标,然后看初始最小值和最后的最小值得坐标是否相同,若不同则交换位置,相同则不交换

     1  int a[]=new int[]{3,21,12,5,5,47,564,64,13,48,12,3,4,5,3,87,54,98};
     2         for(int i=0; i<a.length-1; i++){
     3             int min=a[i];//最小的数
     4             int minIndex=i ;
     5             for(int j=i+1;j<a.length;j++){//从第二个数开始循环比较
     6                 if(a[j]<min){//如果后面的小于最小的
     7                     min=a[j];//改变最小数的值
     8                     minIndex=j;
     9                 }
    10             }
    11             //最小数跟第i位置上的交换   所以要记录下标
    12             int temp = a[i];
    13             a[i] = min;
    14             a[minIndex] = temp;
    15         }
    16 
    17         for (int i=0;i<a.length;i++){
    18             System.out.print(a[i]+",");
    19         }

    总结:插入排序算法比冒泡快一倍,比选择排序略快一点,但这些算法都是O(N2)的时间级别。

  • 相关阅读:
    odoo 的各种domain
    odoo search之时间搜索,时间段查询
    git 修改远程仓库地址
    Windows 挂起进程
    结构体 偏移量 (size_t)&(((s *)0)->m) , list相关
    Data Flow Diagram with Examples
    Windows环境,获取当前线程的ID,GetCurrentThreadId
    获取 保存 系统信息 [Windows]
    notepad正则删除关键词所在行
    文件或文件夹改变后,发信号让系统刷新
  • 原文地址:https://www.cnblogs.com/zxqflying/p/10417172.html
Copyright © 2020-2023  润新知