冒泡排序、选择排序、插入排序

本文介绍了三种基本的排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较逐步将最大值移到最后;选择排序则在未排序部分寻找最小值并放到已排序部分末尾;插入排序则将每个元素插入到已排序序列的正确位置。这些算法是理解计算机科学中基础排序原理的重要部分。
摘要由CSDN通过智能技术生成

1. 冒泡排序

循环n次,每次在array.length中相邻两个做比较,排在最后的数是最大的元素,所以下一次循环就不用比较最后的数,较小的数渐渐浮到前面。

 public static int[] bubbleSort(int[] array)
    {
        if(array.length > 0)
        {
            for(int i=0; i<array.length; i++)
            {
                for(int j=0; j<array.length-i-1; j++)
                {
                    if(array[j]>array[j+1])
                    {
                        swap(array,j,j+1);
                    }
                }
            }
        }
        return array;
    }

    public static void swap(int []array,int a, int b)
    {
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
    }

    public static void main(String[] args) {
        int a[]={2,5,3,1};
        bubbleSort(a);
        for(int b:a)
            System.out.println(b);

    }

在这里插入图片描述

2. 选择排序

设array[0]是min, 0是minIndex ,循环n-m次,找出minIndex,array[minIndex]依次放到排好的序列后面。

其实就是按照i循环n次,每次把array[i]设为最小值,和未排的序列比较,找到最小的array[index],再和array[i]交换。

public class selectionSort {
    public static int[] selectionSort(int []array)
    {
        if(array.length > 0)
        {
            for(int i=0; i<array.length; i++)
            {
                int minIndex = i;
                for(int j =i; j<array.length; j++)
                {
                    if(array[j]<array[minIndex])
                        minIndex = j;
                }
                if(minIndex != i)
                {
                    swap(array,i,minIndex);
                }
            }
        }
        return array;
    }
    public static void swap(int []array,int a, int b)
    {
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
    }

    public static void main(String[] args) {
        int a[]={0,5,3,1};
        selectionSort(a);
        for(int b:a)
            System.out.println(b);

    }
}

在这里插入图片描述

3. 插入排序

思想就是:

  • 第一个元素认为已经被排序
  • 取出下一个元素在已经排好序的元素中扫描,找到合适的位置插入
  • 如果该元素current小于已排序的元素,已排序的元素往后移,腾出一个地给current,直到找到一个比current小的元素,放到它后面。
  • 不用swap函数,直接赋值,array[index+1] = array[index]
public class insertSort {
    public static int[] insertSort(int []array)
    {
        if(array.length > 0)
        {
            for(int i=0; i<array.length-1 ;i++)
            {
                int current = array[i+1]; //从第二个数开始比较
                int index = i;
                while(index>=0 && current <array[index])//如果current比排好序中的最后一个数小,进入循环
                {
                    array[index +1] = array[index];//排好序中的每个数往后移,给current腾地儿。直到找到一个数比current小,放到那个数后面。
                    index--;
                }
                array[index+1] = current;//如果current比排好序中的最后一个数大,直接把current放到数组后一位。
            }
        }
        return array;
    }


    public static void main(String[] args) {
        int a[]={-1,5,3,1};
        insertSort(a);
        for(int b:a)
            System.out.println(b);

    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值