黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序

——- android培训java培训、期待与您交流! ———-
/*
需求:将一组数组中的数从小到大排序
一、选择排序法思路:
1.用数组中第一个元素和之后的每个元素相比较,如果第一个元素大,则交换
两个数的位置,这样最小的元素便排到第一位。依次用第二个元素,第三个元
素……倒数第二个元素与排在其后面的元素比较,如果前面的数值大交换两个
数对应的下标。
2.当数组中所有元素两两比较完后,这个数组便按照从小到大的顺序排好了
步骤:
1.使用嵌套循环对数组遍历,外循环控制数组任意两元素中前面的元素的下标,
内循环控制后面元素的下标。
2.在内循环循环变量的初始值与外循环的循环变量值的变化相同,且内循环变量
的最大值为数组元素个数碱一,计算数组元素个数使用函数“数组名.length”,(计算
字符串的长度用“数组名.length()”)。
3.在内循环体中,定义一个条件,如果前面的元素数值大于后面元素的数值,交换
两个元素下标。
*/

public static void selectSort(int[] arr)
    {
        //外循环控制前面的元素
        for(int x = 0; x < arr.length ;x++ )
        {
            //内循环控制后面的元素
            for(int y = x; y < arr.length-1 ; y++ )
            {
                //前面的元素数值大于后面元素,交换两个元素下标
                if(arr[y] < arr[x])    
                {
                    int temp;
                    temp = arr[y];
                    arr[y] = arr[x];
                    arr[x] = temp;
                }
            }
        }
    }

二、冒泡排序法思路:
1.依次比较数组中相邻两元素的大小,如果前面元素比后面元素大,交换它们
的下标。经过一轮的多次比较后,数值最大的一个元素便排在最后。
2.这样每经过一轮比较需要比较的元素便少一个,一直到剩下一个元素。此时,
该数组便按照从小到大的顺序排好了。
步骤:
1.使用嵌套循环,外循环控制循环的轮数,内循环控制数组中需要比较的元素的下标。
2.外循环变量的初始值从1开始,总共需要arr.length-1轮循环。内循环变量每次都从0 开
始,内循环的最大值是元素总数减去循环的轮数(外循环变量)
3.内循环体中,定义一个条件,如果前面的数值大于后面的,则交换两个数的下标。

public static void bubbleSort(int[] arr)
    {
    //外循环控制循环的轮数
    for(int x = 1; x < arr.length; x++)
        {
        //内循环控制比较元素的下标
        for(int y = 0; y < arr.length-x ;y++)
            {
                if(arr[y] > arr[y+1])
                {
                    int temp;
                    temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;
                }
            }
        }
    }

三、插入排序法思路:
1.从第二个元素开始依次取出数组中后面的元素。
2.每取出一个元素就不断循环地与排好序的数据比较,将其放在合适的位置。直到把
最后一个数据插入到合适位置。
步骤:
1.从第二个元素开始依次取出数组中的元素,因为取出的数不断变化,将其赋给变量
2.使用while语句循环地比较取出的数剧与排好序的数据,如果取出的数比排在其前面的
数小,将排在其前面的数后移一位,直到该取出数被排到第一位,或者比排在其前面的
数大为止。
3.最后将储存在变量中的数放在找到的位置上。

public static void insertSort(int[] arr)
    {
    for(int i = 1; i < arr.length; i++)
        {
            int m = arr[i];  //变量m中存放取出的数据
            int j = i-1;  //变量j表示取出的数据(下标为i)的前一位
            while(j >= 0 && arr[j] > m)
            {
                arr[j+1] = arr[j]; //将排在取出数据前面数据的后移一位
                j--;    //不断减小前一位的下标
            }
            arr[j+1] = m;   //跳出while循环的j多碱了一次
        }

四、验证

class PaiXu
{
    //主函数
    public static void main(String[] args) 
    {
        int[] col = {5,52,23,2,8,95,52,30};
        daYin(col);   //打印原始数组
        System.out.println("------------------------------------------------");
        selectSort(col);  //使用选择排序法按从小到大排序
    //  bubbleSort(col);  //使用冒泡排序法按从小到大排序
    //  insertSort(col);  //插入排序法按从小到大排序
        daYin(col) ;  
    }
}

选择排序、冒泡排序和插入排序的结果如下:
这里写图片描述

 ——- android培训java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值