排序算法之冒泡选择插入排序(java)(代码片段)

yuwenS. yuwenS.     2022-12-03     498

关键词:

文章目录

通过Java实现冒泡、选择、插入排序算法

排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程、排序算法有、冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、基数排序、堆排序、桶排序和计数排序。这里就简单实现其中的冒泡、选择和插入排序。

冒泡排序

冒泡排序介绍和实现

冒泡排序通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若大于相邻的元素就交换,使值较大的元素逐渐从前移向后部,这样逐个依次进行比较和交换,就像水底下的气泡一样逐渐向上冒,这样就能达到排序的目的

具体代码的实现

 public static void bubbleSort(int[] arr)
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) 
            for (int j = 0; j < arr.length - 1 - i; j++) 
                if (arr[j] > arr[j+1])
                    flag = true;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                
            
        
    

对于冒泡排序还能进行优化,可以设置一个表示变量,用来判断是否发生了交换,如果没有发生交换则说明这个数组是已经排序好的

优化之后的代码

public static void bubbleSort(int[] arr)
        int temp = 0;
        boolean flag = false; //标识变量。是否进行过交换
        for (int i = 0; i < arr.length - 1; i++) 
            for (int j = 0; j < arr.length - 1 - i; j++) 
                if (arr[j] > arr[j+1])
                    flag = true;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                
            
            if (!flag) //在排序中,一次交换都没有发生
                break;
            else 
                flag = false; //重置flag,进行下次交换
            
        
    

选择排序

选择排序介绍和实现

选择排序是第一次从待排序的数据元素中选出最小或最大的一个元素,存放到起始位置,然后再从剩下的未排序元素中选出最小的或最大的元素,放到已排序的序列的末尾,就是第二个位置,依次类推,直到待排的元素个数未零,这样就实现了排序。选择排序是不稳定的排序方法。

选择排序图解

具体代码实现

public static void selectSort(int[] arr)
        int minIndex = 0;
        int min = 0;
        for (int i = 0; i < arr.length - 1; i++) 
            min = arr[i]; //假设第一个元素最小
            minIndex = i; //最小元素的下标
            for (int j = i+1; j < arr.length; j++) 
                if (min > arr[j]) //假设的最小值大于arr[j]
                    min = arr[j];
                    minIndex = j;
                
            
            if (minIndex != i) //如果最小元素的下标不等于假设最小元素的下标
                arr[minIndex] = arr[i];
                arr[i] = min;
            
        
    

插入排序

插入排序介绍和实现

插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

插入排序图解

具体代码实现

 public static void insertSort(int[] arr)
        //定义待插入的数
        int insertVal = 0;
        int insertIndex = 0;
        for (int i = 0; i < arr.length - 1; i++) 
            insertVal = arr[i+1];
            insertIndex = i;
            // 给 insertVal 找到插入的位置
            // 1. insertIndex >= 0 保证在给 insertVal 找插入位置,不越界
            // 2. insertVal < arr[insertIndex] 待插入的数,还没有找到插入位置
            // 3. 需要将 arr[insertIndex] 后移
            while (insertIndex >= 0 && insertVal < arr[insertIndex])
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex--;
            
            // 当退出 while 循环时,说明插入的位置找到, insertIndex + 1
            if (insertIndex != i)
                arr[insertIndex + 1] = insertVal;
            
        
    

图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)

排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的... 查看详情

排序之冒泡插入选择(代码片段)

一、衡量一个排序算法1.1、排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数、低阶时间复杂度反应的是数据规模n很大的时候的一个增长趋势,所以它表示的时候会忽略系数、常数、低阶... 查看详情

图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)

  排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习... 查看详情

常用算法之冒泡选择插入快排(代码片段)

常用简单算法一、冒泡排序冒泡排序的基本思想是,对相邻的元素进行两两比较,假设这连个数字是, a、b 同时排序规则是升序,如果a>b则他们位置进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端... 查看详情

排序算法之冒泡插入快排和选择排序(代码片段)

排序算法大全packagecn.baidu;importjava.util.Arrays;publicclassSortTestpublicstaticvoidmain(String[]args)int[]arr=2,5,3,1,4;System.out.println("排序前:"+Arrays.toString(arr));//InsertSort.sort(arr);//BubbleSort.sort(arr);//SelectionSort.sort(arr);//ShellSort.sort(arr);//QuickSort.sort(arr)... 查看详情

c++不知算法系列之排序从玩转冒泡算法开始(代码片段)

1.前言所谓排序,指把数据群体按个体数据的特征按从大到小或从小到大的顺序存放。排序在应用开发中很常见,如对商品按价格、人气、购买数量等排序,便于使用者快速找到数据。常见的排序算法分为两大类:比较类:通过... 查看详情

挖掘算法中的数据结构:o(n^2)排序算法之选择插入冒泡希尔排序及优化(代码片段)

一.前言1.语言要求对于算法而言,它其实是与语言无关的,被誉为算法神书的《算法导论》中都是以伪码的形式进行编写。算法更重要的是一种思想,当你想透彻后编代码实现就不是问题了。由于不同的语言含有独特... 查看详情

java交换排序之(冒泡排序快速排序)

...来无事,先写篇博文来结束今天。我们大家都知道java的排序算法很多,接下来我就先看看java最常用的几种排序算法的思想源码附上。(本文所有排序只针对值排序,关于对象排序问题待续.....)1.插入排序(直接插入排序、二分... 查看详情

算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序

  排序的元素实现了Comparable接口,以达到对于通用性.  最基础的排序是冒泡排序,下面是其思路:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对... 查看详情

排序算法(冒泡排序选择排序插入排序快速排序归并排序)(代码片段)

1、冒泡排序  (英语:BubbleSort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排... 查看详情

算法之选择排序(代码片段)

选择排序:同属于基本的算法,在冒泡排序的基础之上进行优化的,相比冒泡排序,选择排序是内层循环只做比较,筛选并记录与外层循环相比最小的值与下标,在内层循环结束后,进行一次值替换,此排序比较次数不变,减少... 查看详情

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)(代码片段)

文章目录直接插入排序代码实现复杂度的计算希尔排序希尔排序的预排序代码实现选择排序代码实现堆排序冒泡排序代码实现💢注:以下排序都是以排升序为例。直接插入排序直接插入排序的主要思路就是:1.首先默... 查看详情

数据结构c语言版八大算法(上)图文详解带你快速掌握——希尔排序,堆排序,插入排序,选择排序,冒泡排序!(代码片段)

数据结构之八大算法详解(1)——希尔排序,堆排序,插入排序,选择排序,冒泡排序!插入排序基本思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的... 查看详情

算法之排序二

算法之排序二四、冒泡排序与插入排序    为何在实际中倾向于使用插入排序而不是冒泡排序,尽管它们的时间复杂度都是O(n2),而且也都是稳定的。看一下两个算法在交换元素数值的处理上就知道了。对于冒泡排... 查看详情

八大内部排序算法之希尔堆排序插入排序算法(代码片段)

前言我们所知的八大内部的排序算法有冒泡排序、选择排序、快速排序、归并排序、链式基数排序、插入排序、希尔排序、堆排序、而这篇文章主要研究这其中的希尔排序和堆排序算法,之前的排序算法都在下面连接中介绍... 查看详情

浙江高考vb之排序系列(代码片段)

浙江信息技术Giao考之"排序系列"在浙江高考中,排序算法是一个大头,下至冒泡选择,上至桶排索引.这里我们大致梳理一遍高考可能考到的排序算法.排序算法有哪些?在算法中排序(sort)有很多算法:冒泡排序(BubbleSort)选择排序(Se... 查看详情

java八股文面试题基础篇--二分查找算法冒泡排序选择排序插入排序希尔排序快速排序(代码片段)

1.二分查找算法要求能够用自己语言描述二分查找算法能够手写二分查找代码能够解答一些变化后的考法1.1二分查找算法介绍二分查找也是一种在数组中查找数据的算法。它只能查找已经排好序的数据。二分查找通过比较数组中... 查看详情

排序(上):冒泡排序插入排序和选择排序(代码片段)

如何分析一个排序算法?分析一个排序算法的三要素:排序算法的执行效率、排序算法的内存消耗以及排序算法的稳定性。排序算法的执行效率对于排序算法执行效率的分析,一般是从以下三个方面来衡量:最好情况、最坏情况... 查看详情