【算法篇】/*冒泡排序 选择排序 反转排序 三大排序算法*/

简介: 【算法篇】/*冒泡排序 选择排序 反转排序 三大排序算法*/

hello各位小伙伴们,我依旧是你们熟悉的那个集美貌 智慧 优雅与一体的槿凉!最近呢也是学完了java基础部分,掌握的感觉还可以,然后把基本知识点又过了一遍,感觉自己马上就快成为编程大佬了哈哈哈。开个玩笑啦,那么javase学完,紧接着数据结构和算法不能落下了,那么今天呢就简单的来分享三个简单的排序算法,希望这些知识点对大家有点帮助,喜欢的小伙伴来个一键三连呐!

一:冒泡排序

基本思想:即现在有个数组arr,数组中有一些元素,现在我们要对这个数组里面的元素进行一个从小到大的排序,冒泡排序采用的思想就是比较相邻的元素值,如果满足条件就交换值,类似于水中的气泡小的往上冒,大的往下沉。

算法实现:

首先我们创建一个乱序数组:

int[] array= { 63, 4, 24, 1, 3, 15 };

接下来我们实现冒泡排序算法

publicvoidsort(int[] array) {
for (inti=1; i<array.length; i++) {
// 比较相邻两个元素,较大的数往后冒泡for (intj=0; j<array.length-i; j++) {
if (array[j] >array[j+1]) {
inttemp=array[j]; // 把第一个元素值保存到临时变量中array[j] =array[j+1]; // 把第二个元素值保存到第一个元素单元中array[j+1] =temp; // 把临时变量(也就是第一个元素原值)保存到第二个元素中                }
            }
        }

最后我们遍历输出排序后的数组:

*/publicvoidshowArray(int[] array) {
for (inti : array) { // 遍历数组System.out.print(" >"+i); // 输出每个数组元素值        }
System.out.println();
    }

这个算法非常的简单昂,大家看看代码基本就能看懂了,如果有不懂的地方可以私信问我哈!这里给出完整代码实现:

publicclassBubbleSort {
publicstaticvoidmain(String[] args) {
// 创建一个数组,这个数组元素是乱序的int[] array= { 63, 4, 24, 1, 3, 15 };
// 创建冒泡排序类的对象BubbleSortsorter=newBubbleSort();
// 调用排序方法将数组排序sorter.sort(array);
    }
/*** 冒泡排序* * @param array 要排序的数组*/publicvoidsort(int[] array) {
for (inti=1; i<array.length; i++) {
// 比较相邻两个元素,较大的数往后冒泡for (intj=0; j<array.length-i; j++) {
if (array[j] >array[j+1]) {
inttemp=array[j]; // 把第一个元素值保存到临时变量中array[j] =array[j+1]; // 把第二个元素值保存到第一个元素单元中array[j+1] =temp; // 把临时变量(也就是第一个元素原值)保存到第二个元素中                }
            }
        }
showArray(array); // 输出冒泡排序后的数组元素    }
/*** 显示数组中的所有元素* * @param array 要显示的数组*/publicvoidshowArray(int[] array) {
for (inti : array) { // 遍历数组System.out.print(" >"+i); // 输出每个数组元素值        }
System.out.println();
    }
}

二:直接选择排序

基本思想:在数组中确定一个元素,与其他的元素相比较,比这个元素大的往后走,比这个元素小的往前走,而不是交换相邻元素,直接选择排序的交换次数很少,速度比冒泡排序要快。

算法示例:(这里我拼了个图大家直接看第……趟排序的结果即可)


788cdcff9ec54af1b6fbd4b94927b80f.jpg

代码实现:

老规矩我们先定义一个乱序的数组:

int[] array= { 63, 4, 24, 1, 3, 15 };

接下来我们实现选择排序算法:

publicvoidsort(int[] array) {
intindex;
for (inti=1; i<array.length; i++) {
index=0;
for (intj=1; j<=array.length-i; j++) {
if (array[j] >array[index]) {
index=j;
                        }
                    }
// 交换在位置array.length-i和index(最大值)上的两个数inttemp=array[array.length-i]; // 把第一个元素值保存到临时变量中array[array.length-i] =array[index]; // 把第二个元素值保存到第一个元素单元中array[index] =temp; // 把临时变量也就是第一个元素原值保存到第二个元素中                }

接着我们遍历输出排序后的数组

publicvoidshowArray(int[] array) {
for (inti : array) { // 遍历数组System.out.print(" >"+i); // 输出每个数组元素值                }
System.out.println();
            }
相关文章
|
23天前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
104 3
|
2月前
|
搜索推荐 算法 Go
Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
本案例介绍使用冒泡排序对整数数组进行升序排序的实现方法,涵盖输入处理、错误检查与排序逻辑。通过代码演示和算法解析,帮助理解排序原理及Go语言切片操作,为学习更复杂排序算法打下基础。
|
2月前
|
搜索推荐
选择排序与其它排序算法比较
选择排序与冒泡排序同属O(n²)排序算法,但选择排序不稳定。相比堆排序,虽每轮均选最大元素,但选择排序基于线性结构,效率较低,而堆排序利用大顶堆结构提升了选择效率。
35 0
|
2月前
|
搜索推荐
冒泡排序与其它排序算法比较
本内容比较了冒泡排序、选择排序和插入排序的特性。三者时间复杂度均为O(n²),但交换次数和稳定性不同。冒泡排序稳定,交换次数多,可优化至O(n);选择排序不稳定,交换次数少;插入排序交换次数最少,且二者均为稳定排序。对于有序数组,冒泡和插入可优化提升效率。
42 0
|
2月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
118 0
|
7月前
|
存储 搜索推荐 算法
算法系列之排序算法-堆排序
堆排序(Heap Sort)是一种基于堆数据结构的比较排序算法。它的时间复杂度为 $O(nlogn)$,并且是一种原地排序算法(即不需要额外的存储空间)。堆排序的核心思想是利用堆的性质来维护一个最大堆或最小堆,然后逐步将堆顶元素(最大值或最小值)取出,放到数组的末尾,最终得到一个有序的数组。
163 8
算法系列之排序算法-堆排序
|
6月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
236 67
|
10月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
344 7

热门文章

最新文章