• Java实现选择排序和冒泡排序


    1 问题描述
    给定一个可排序的n元素序列(例如,数字、字符和字符串),将它们按照非降序方式重新排列。

    2 解决方案
    2.1 选择排序原理简介

    选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素和第一个元素交换位置;然后,我们从第二个元素开始扫描剩下的n-1个元素,找到这n-1个元素中的最小元素,将最小元素和第二个元素交换位置;然后从第三个元素开始扫描…一般来说,就是从第i个元素开始扫描,找到第n-i+1个元素中的最小元素,将最小元素与第i个元素交换位置。这样,在进行n-1次遍历后,该列表就排好序了。

    package com.liuzhen.chapterThree;
    
    public class SelectionSort {
        
        public static void getSelectionSort(int[] a){
            int min = 0;     //用于存放n-i序列中最小元素序号
            int temp = 0;    //交换数组元素值的中间变量
            //打印输出未排序前数组序列
            System.out.print("排序前:          ");
            for(int p = 0;p < a.length;p++)
                System.out.print(a[p]+"	");
            System.out.println();
            
            for(int i = 0;i < a.length-1;i++){
                min = i;
                for(int j = i+1;j < a.length;j++){
                    if(a[j] < a[min])
                        min = j;
                }
                //交换a[i]和a[min]的值
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
                //打印输出每一次选择排序结果
                System.out.print("排序第"+(i+1)+"趟:");
                for(int p = 0;p < a.length;p++)
                    System.out.print(a[p]+"	");
                System.out.println();
            }
        }
        
        public static void main(String args[]){
            int[] a = {89,45,68,90,29,34,17};
            getSelectionSort(a);
        }
    }
    

    运行结果:

    排序前:   89    45    68    90    29    34    17    
    排序第1趟:17    45    68    90    29    34    89    
    排序第2趟:17    29    68    90    45    34    89    
    排序第3趟:17    29    34    90    45    68    89    
    排序第4趟:17    29    34    45    90    68    89    
    排序第5趟:17    29    34    45    68    90    89    
    排序第6趟:17    29    34    45    68    89    90
    

    2.3 冒泡排序原理简介
    我们从列表的第一个元素开始,比较列表中相邻的两个元素,如果第一个元素大于第二元素,则交换这两个元素的位置,否则就从第二个元素位置开始重复上一步操作。重复多次以后,最大的元素就“沉到”列表的最后一个位置。这样一直做,直到n-1遍以后,该列表就排好序了。

    package com.liuzhen.chapterThree;
    
    public class BubbleSort {
        
        public static void getBubbleSort(int[] a){
            int temp;      
            //打印输出未排序前数组序列
            System.out.print("排序前:          ");
            for(int p = 0;p < a.length;p++)
                System.out.print(a[p]+"	");
            System.out.println();            
            for(int i = 0;i < a.length-1;i++){            
                for(int j = 0;j < a.length-1-i;j++){
                    if(a[j+1] < a[j]){
                        //交换a[j]和a[j+1]的值
                        temp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = temp;
                    }
                }
                //打印输出每一次选择排序结果
                System.out.print("排序第"+(i+1)+"趟:");
                for(int p = 0;p < a.length;p++)
                    System.out.print(a[p]+"	");
                System.out.println();
            }
        }
        
        public static void main(String args[]){
            int[] a = {89,45,68,90,29,34,17};
            getBubbleSort(a);
        }
    }
    

    运行结果:

    排序前:   89    45    68    90    29    34    17    
    排序第1趟:45    68    89    29    34    17    90    
    排序第2趟:45    68    29    34    17    89    90    
    排序第3趟:45    29    34    17    68    89    90    
    排序第4趟:29    34    17    45    68    89    90    
    排序第5趟:29    17    34    45    68    89    90    
    排序第6趟:17    29    34    45    68    89    90
    
  • 相关阅读:
    Spring入门-对异常的处理
    Spring入门-Interceptor基本使用
    Spring入门-浏览器中文乱码问题
    Spring入门-使用SpringMVC完成一个登陆页面
    Spring入门-获取页面参数&向页面传值&重定向
    【Linux】【NodeJs】Centos7安装node-v10.16.3环境
    【Linux】【Go】Centos7安装go1.13环境
    【Linux】【Fabric】Centos7搭建Fabric运行环境
    【Linux】【ELK】利用elasticproxy对elasticsearch进行二次排序
    【Linux】【ELK】搭建Elasticsearch+Logstash+Kibana+Filebeat日志收集系统
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078528.html
Copyright © 2020-2023  润新知