冒泡排序和直接插入排序和选择排序

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC"; min-height: 33.0px }

简单排序(学完了要及时复习,不然像没学一样,而且

以后要花更多的时间)

冒泡排序:小的数往上冒

冒泡排序(BubbleSort)是重复地走访要排序的数列,

一次比较两个元素,如果他们的顺序错误,就把他们就

把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

原理:

1.比较相邻的元素。如果第二个比第一个大,就交换他们两个。(小的在前)

2.对每一对相邻元素作同样的工作,从第一对到结尾的

最后一对。在这一点,最后的元素应该会是最大的数。

3.针对所有的元素重复以上的步骤,出最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到

没有任何一对数字需要比较。

时间复杂度:

若文件的初始状态是正序的,一趟扫描即可完成排序。

所需要的关键字比较次数C和记录和记录移动次数M

均达到最小值:Cmin=n-1;

Mmin=0;

所以冒泡排序最好的时间复杂度为O(n)。

public class BubbleSort{
    public static void sort(long[] arr){
        long tmp=0;
        for (int i=0;i<arr.length-1;i++) {
            //趟数,并让最小的于前
        for (int j=arr.length-1;j>i;j--) {
                if (arr[j]<arr[j-1]) {
                    //进行交换
                    tmp=arr[j-1];
                    arr[j-1]=arr[j];
                    arr[j]=tmp;
                }
            }
        }
    }
}

public class TestSort1{
    public static void main(String[] args) {
        long[] arr=new long[5];
        arr[0]=34;
        arr[1]=23;
        arr[2]=2;
        arr[4]=1;
        arr[3]=-4;
        //如果没有赋值完的话,后面的直接补0
        System.out.print("[");
        for (long num:arr){
            //用法??
            System.out.print(num+" ");

        }
        System.out.print("]");
        System.out.println();

        BubbleSort.sort(arr);
        //排序后再打印 

        System.out.print("[");
        for(long num:arr){
            System.out.print(num+" ");
        }
        System.out.print("]");
        System.out.println();

    }
}
/*
运行结果:
  i         j
[34 23 2 -4 1 ]
[-4 1 2 23 34 ]
*/

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC"; min-height: 33.0px }

//自己再去默写一次

选择排序:

选择最小的于前并交换位置,其余不变

public class SelectionSort1{
    public static void sort(long[] arr){
        int k=0;
        long tmp=0;
        for (int i=0;i<arr.length-1;i++) {
            //趟数小于length-1,因为最后一个不用排序,就是最大的
            k=i;
            //最小的指向数,k去指向
            for (int j=i;j<arr.length;j++) {
                //为什么是arr.length而不是length-1?length-1只能到length-1
              //边界位置还是要思考思考!!最后再测试测试
                if(arr[j]<arr[k]) {
                    k=j;
                }
            }
            tmp=arr[i];
            arr[i]=arr[k];
            arr[k]=tmp;
        }
    }
}

public class TestSort2{
    public static void main(String[] args) {
        long[] arr=new long[5];
        arr[0]=34;
        arr[1]=23;
        arr[2]=2;
        arr[4]=1;
        arr[3]=-4;
        //如果没有赋值完的话,后面的直接补0
        System.out.print("[");
        for (long num:arr){
            //用法??
            System.out.print(num+" ");

        }
        System.out.print("]");
        System.out.println();

        SelectionSort1.sort(arr);
        //排序后再打印

        System.out.print("[");
        for(long num:arr){
            System.out.print(num+" ");
        }
        System.out.print("]");
        System.out.println();

    }
}
/*
arr.length-1的循环结果
[34 23 2 -4 1 ]
[-4 2 23 34 1 ]
arr.length的循环结果
[34 23 2 -4 1 ]
[-4 1 2 23 34 ]
*/

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Arial; color: #333333; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "PingFang SC"; color: #333333; background-color: #ffffff }
span.s1 { }

直接插入排序:

直接插入排序是一种简单的插入排序法,其基本思想是

把待排序的记录按其关键码值的大小逐个插入到一个已经

排好序的有序序列中,直到所有的记录插入完为止,得到

一个新序列。

例如,已知待排序的一组记录是

60,71,49,11,24,3,66

假设在排序过程中,前三个记录已经按关键码值递增

的次序重新排序,构成一个有序序列:

49,60,71

将待排序记录中的第四个记录11插入尚需序列总,得到

一个新的含4个记录的有序序列。

1.设置监视r0,将待插入记录的值赋给r0;

2.设置开始查找的位置j;

3.在数组中进行搜索,搜索中将第j个记录后移,直到

r0.key>=[j].key为止;

4.将r0插入r[j+1]的位置上

原文地址:https://www.cnblogs.com/shijinglu2018/p/8449023.html

时间: 2024-11-08 23:05:10

冒泡排序和直接插入排序和选择排序的相关文章

图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

图形化排序算法比较:快速排序.插入排序.选择排序.冒泡排序

常见排序算法实现(直接插入排序,冒泡排序,快速排序,建大选择排序)

常见的排序算法实现(直接插入排序,冒泡排序,快速排序,建大选择排序),还有几个下次写上. #include "stdio.h" #include "stdlib.h" #include "malloc.h" #include <iostream> using namespace std; #define N 10 void showArr(int a[]); void InsertSort(int a[]);    //直接插入排序

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率.排序算法的内存消耗以及排序算法的稳定性. 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面来衡量: 最好情况.最坏情况.平均情况时间复杂度 时间复杂度的系数.常数.低阶 比较次数和交换(或移动)次数 第1.2点在之前的复杂度分析中我们已经讲过了,第3点会在这一节以及接下来的章节中详细讲解. 这一节和下一节讲的都是基于比较的排序算法.基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元

Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这

排序系列之——冒泡排序、插入排序、选择排序

排序之——冒泡排序: 基本思想:假设待排序表长为N,从后往前(或者从前往后)两两比较相邻元素的值,若为逆序(arr[i-1]>arr[i]),则交换他们,直到序列比较完.这时一趟冒泡. 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <time.h> 5 #define N 20 6 7 void print_Arr(int *arr,

插入排序,选择排序,冒泡排序等常用排序算法(java实现)

  package org.webdriver.autotest.Study; import java.util.*; public class sort_examp{  public static void main(String[] args)  {   Integer[] num={49,38,65,97,76,13,27,49,78,34,12,64,1};   //insertsort(num);   //selectsort(num);   maopaosort(num);     

三个典型的经典算法冒泡排序,插入排序,选择排序

稍微轻松点,彻底理解了一下这三个算法,当然只是部分,还有什么改良版,具体分类等等,不过下周有事,先把这几个典型的弄明白,老规矩,看代码说问题 /** * Created by fanyafeng on 2015/5/8/0008. */ public class ALGTest { public static void main(String[] args) { System.out.println("排序算法"); System.out.println("---------

《数据结构与算法之美》——冒泡排序、插入排序、选择排序

排序,是每一本数据结构的书都绕不开的重要部分. 排序的算法也是琳琅满目.五花八门. 每一个算法的背后都是智慧的结晶,思想精华的沉淀. 个人觉得排序算法没有绝对的孰优孰劣,用对了场景,就是最有的排序算法. 当然,撇开这些业务场景,排序算法本身有一些自己的衡量指标,比如我们经常提到的复杂度分析. 我们如何分析一个算法? 排序算法的执行效率 1.最好.最坏和平均情况的时间复杂度 2.时间复杂度的系数.常数和低阶 一般来说,在数据规模n很大的时候,可以忽略这些,但是如果我们需要排序的数据规模在几百.几千