排序算法
发布日期:2022-02-05 04:27:54
浏览次数:1
分类:技术文章
本文共 3787 字,大约阅读时间需要 12 分钟。
排序算法
自己码的代码,亲测可以直接运行
冒泡排序
- 原理:
比较相邻的元素。如果第一个比第二个大,就交换它们两个。
- 算法分析
最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
/** * 冒泡排序 */ public void bobSort() { for (int i = 0; i < length - 1; i++) {// 排序轮数 for (int j = 0; j < length - 1; j++) {// 比较次数 if (array[j] > array[j + 1]) { int temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp; } } } }
快速排序
- 原理:
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
- 算法分析
最佳情况:T(n) = O(nlogn) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(nlogn)
/** * 快速排序 */ public static void quickSort(int array[], int low, int high) { // 1,找到递归算法的出口 if (low > high) { return; } // 2, 存 int i = low; int j = high; // 3,key int key = array[low]; // 4,完成一趟排序 while (i < j) { // 4.1 ,从右往左找到第一个小于key的数 while (i < j && array[j] > key) { j--; } // 4.2 从左往右找到第一个大于key的数 while (i < j && array[i] <= key) { i++; } // 4.3 交换 if (i < j) { int p = array[i]; array[i] = array[j]; array[j] = p; } } // 4.4,调整key的位置 int p = array[i]; array[i] = array[low]; array[low] = p; // 5, 对key左边的数快排 quickSort(array, low, i - 1); // 6, 对key右边的数快排 quickSort(array, i + 1, high); }
选择排序
- 原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 算法分析
最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
/** * 选择排序 */ public static void bubbleSort(int array[]){ int len=array.length; for (int i=0 ; iarray[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } }
源码
package com.demo.test;public class SortTest { private int[] array; private int length; /** * 构造函数 * * @param array */ public SortTest(int[] array) { this.array = array; this.length = array.length; } /** * 打印数组中数据 */ public void display(int[] array) { for (int i : array) { System.out.print(i + " "); } System.out.println(); } /** * 冒泡排序 */ public void bobSort() { for (int i = 0; i < length - 1; i++) {// 排序轮数 for (int j = 0; j < length - 1; j++) {// 比较次数 if (array[j] > array[j + 1]) { int temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp; } } } } /** * 快速排序 */ public static void quickSort(int array[], int low, int high) { // 1,找到递归算法的出口 if (low > high) { return; } // 2, 存 int i = low; int j = high; // 3,key int key = array[low]; // 4,完成一趟排序 while (i < j) { // 4.1 ,从右往左找到第一个小于key的数 while (i < j && array[j] > key) { j--; } // 4.2 从左往右找到第一个大于key的数 while (i < j && array[i] <= key) { i++; } // 4.3 交换 if (i < j) { int p = array[i]; array[i] = array[j]; array[j] = p; } } // 4.4,调整key的位置 int p = array[i]; array[i] = array[low]; array[low] = p; // 5, 对key左边的数快排 quickSort(array, low, i - 1); // 6, 对key右边的数快排 quickSort(array, i + 1, high); } public static void main(String[] args) { int[] array = { 77, 29, 28, 36, 33, 25, 10 }; SortTest bobSort = new SortTest(array); System.out.println("冒泡排序前的数据为:"); bobSort.display(array); bobSort.bobSort(); System.out.println("冒泡排序后的数据为:"); bobSort.display(array); int[] array1 = { 77, 29, 28, 36, 33, 25, 10 }; SortTest bobSort1 = new SortTest(array1); System.out.println("快速排序前的数据为:"); bobSort1.display(array1); quickSort(array1,0,array1.length-1); System.out.println("快速排序后的数据为:"); bobSort.display(array1); int[] array2 = { 78, 28, 26, 36, 33, 25, 11 }; SortTest bobSort2 = new SortTest(array2); System.out.println("选择排序前的数据为:"); bobSort2.display(array2); bubbleSort(array2); System.out.println("选择排序后的数据为:"); bobSort2.display(array2);} }}
转载地址:https://blog.csdn.net/weixin_43287508/article/details/86716126 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 10时56分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
paip.项目开发效率提升之思索
2019-04-29
Atitit spring5 集成 mybatis 注解班
2019-04-29
Atitit springboot mybatis spring 集成 Springboot1.4 mybatis3.4.6 /springbootMybatis 目录 1.1. 设置map
2019-04-29
Atitit 模板引擎总结 目录 1. 模板引擎 1 2. 常见模板步骤 1 2.1. 1)定义模板字符串 1 2.2. 2)预编译模板 2 2.3. 渲染模板 2 3. 流程渲染 if el
2019-04-29
Atitit 字符串转换数组main参数解析 args splitByWholeSeparator String string=" -host 101.1 8*124 -db 1
2019-04-29
paip.提升效率----几款任务栏软件vc59
2019-04-29
paip.验证码识别---序列号的反转
2019-04-29
paip.php调试脱离IDE VC59
2019-04-29
paip.DEVSUIT WEB .NET ASPX网站打开慢的原因
2019-04-29
央行数字货币将取代纸币?这篇文章说明白了
2019-04-29
2020消费金融大变局:科技向下扎根 持牌向上生长
2019-04-29
高质量壁纸网站,满足壁纸控的所有想象!
2019-04-29
游戏英雄联盟高清壁纸,人物角色都包括
2019-04-29
吃货注意接收,精美美食图片壁纸来喽
2019-04-29
眼前一亮的UI设计案例|插画世界里的网页首图
2019-04-29
UI设计灵感|高级黑网页首图就该这样设计
2019-04-29
想要酷炫大气的网页设计?这样做超吸睛
2019-04-29
好看又有趣的404页面设计
2019-04-29
元宵节正月十五主题海报还没设计好,PSD分层模板来喽!
2019-04-29
元宵节电商促销首页设计PSD分层模板
2019-04-29