常见几种排序算法

冒泡排序

冒泡排序是一种比较简单的排序方法。也比较好理解,但是通常情况下性能不是很好。在冒泡排序中,序列中的每个数据就是水中的泡泡一样,一个个的向上冒出来,直到冒出水面(达到最大位置)。

算法步骤

1、从开头到结尾遍历数组,比较相邻的元素。如果前一个比后一个大,就交换他们两个。

复制代码
         point
           |
nums = [4,35,23,34,5,4]
// point 此时发现 nums[point] 比 nums[point + 1] 小,调换他俩的位置。

2、对每一个相邻的数据进行对比,直到序列结尾的最后一对,此时"最大值"已经被移动到了"最后一个位置"。

复制代码
                point
                  |
nums = [4,23,34,5,35,4]
// 当 point 到达倒数第二个位置,此时发现 nums[point] 比 nums[point + 1]小
// 调换她俩位置后,就把 35 放到了最后一个,此时最大值已经找出。

PLAINTEXT 复制 全屏

3、重复 1和2 操作。但是每次做完 1和2 操纵后,需要遍历的数就少一个(最后一个),因为每次都会有一个最大值已经被排好了放到了最后。

java 复制代码
public class BubbleSort {

    public static void main(String[] args) {
        int[] nums = {12,123,432,23,1,3,6,3,-1,6,2,6};;
        sort(nums);
        System.out.printf("finish !");
    }

    public static void sort(int[] nums){

        int temp ;
        for(int len = nums.length ; len > 0; len --){
            // 第一层遍历 len 是需要排序的数组长度。
            for(int i = 0 ; i < len - 1 ; i++){
                // 第二层遍历,遍历的数据,每次都少一。
                // 但是每次都会把一个最大值放到最后 nums[len - 1] 的位置。
                if(nums[i] > nums[i + 1]){
              
                    temp = nums[i];
                    nums[i] = nums[i + 1];
                    nums[i + 1] = temp;
                }

            }
        }
    }
}

选择排序

选择排序是一种直观的排序方法。他和冒泡排序一样,需要多次遍历序列。不过冒泡排序,是将最大值挨个的替换相邻数据(冒泡)的方式最后放到最大值的位置的。而选择排序,通过一个指针(point),标记了最大值所在的索引位置。当遍历到最后的时候,将标记的最大值所在的位置与最后一个数交换。

算法步骤

1、从头到尾的遍历数列,遍历过程中,用一个指针记录最大值(最小值)所在的位置。

2、将最大值所在位置的数据与最后一个交换。

3、重复 1和2 步,每次重复后,需要遍历的数列长度就减 1。

public class SelectionSort {

public static void main(String\[\] args) {

int\[\] nums = {12,123,432,23,1,3,6,3,-1,6,2,6};;

sort(nums);

System.out.printf("finish !");

}

public static void sort(int\[\] nums){

int max ; // 最大数所在的位置。

int temp;

for(int len = nums.length ; len > 0; ){

max = 0;

for(int i = 0 ; i < len ; i++){

if(numsi > numsmax){

max = i;

}

}

temp = numsmax;

numsmax= numslen - 1;

nums --len = temp;

}

}

}

相关推荐
春日见14 分钟前
五分钟入门 强化学习---Q-Learning算法与实现
人工智能·python·深度学习·算法·机器学习·计算机视觉
Zldaisy3d1 小时前
全球唯一仿真驱动自适应扫描路径新版本发布,金属3D打印工艺开发进入算法时代
算法·3d
小江的记录本1 小时前
【JVM虚拟机】类加载机制:类加载全流程:加载→验证→准备→解析→初始化(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·算法·安全·spring·面试
故事和你912 小时前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
不吃土豆的马铃薯2 小时前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法
weixin_468466852 小时前
图像滤波算法新手实战指南
图像处理·人工智能·算法·计算机视觉·ai·机器视觉·滤波
Ulyanov2 小时前
深入QML-Python通信 构建响应式交互界面的桥梁设计:QML+PySide6现代开发入门(五)
开发语言·python·算法·交互·qml·系统仿真
重生之我是Java开发战士3 小时前
【贪心算法】加油站,单调递增的数字,坏了的计算器,合并区间,用最少数量的箭引爆气球
算法·贪心算法
小欣加油3 小时前
leetcode 3300 替换为数位和后的最小元素
数据结构·c++·算法·leetcode
晚风予卿云月3 小时前
【枚举】普通枚举
数据结构·c++·算法·竞赛·算法随笔