算法之排序

您所在的位置:网站首页 城市最低气温排第三是按从高到低排吗 算法之排序

算法之排序

2024-07-12 02:00| 来源: 网络整理| 查看: 265

文章目录 排序算法的分类复杂度为O(n^2 )的排序算法冒泡排序插入排序选择排序 复杂度为O(nlogn)的排序算法归并排序快速排序 复杂度为O(n)的排序算法计数排序桶排序 各种排序算法的对比

在生活中,我们离不开排序。例如上体育课时,同学们会按照身高顺序进行排队;又如每一场考试后,老师会按照考试成绩排名次。在编程的世界中,应用到排序的场景也比比皆是。例如当开发一个学生管理系统时,需要按照学号从小到大进行排序;当开发一个电商平台时,需要把同类商品按价格从低到高进行排序。

排序算法的分类

根据时间复杂度可以将排序算法分为三类

排序算法时间复杂度第一类冒泡、插入、选择O(n^2)第二类快排、归并O(nlogn)第三类桶、计数、基数O(n)

根据排序算法的稳定性还可以将排序算法的分为两类

如果值相同的元素在排序后仍然保持着排序前的顺序,则这样的排序算法是稳定排序;如果值相同的元素在排序后打乱了排序前的顺序,则这样的排序算法是不稳定排序。 在这里插入图片描述

稳定性第一类稳定排序算法第二类不稳定排序算法 复杂度为O(n^2 )的排序算法

第一类:时间复杂度为O(n^2 )的排序算法,因为时间复杂度比较高所以适合小规模数据的排序。

冒泡排序

冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡 一样,根据自身大小,一点一点地向着数组的一侧移动。

冒泡排序是一种稳定排序,值相等的元素并不会打乱原本的顺序。由于该排序算法 的每一轮都要遍历所有元素,总共遍历(元素数量-1)轮,所以平均时间复杂度 是O(n^2 )。

冒泡排序的代码实现

public static void bubbleSort(int[] array) { for (int i = 0; i endIndex) { return; } // 得到基准元素位置 int pivoIndex = partition(arr, startIndex, endIndex); // 根据基准元素,分为两部分进行递归排序 quickSort(arr, startIndex, pivoIndex - 1); quickSort(arr, pivoIndex + 1, endIndex); } /** * 分治(双边循环法) * @param arr 待交换数组 * @param startIndex 起始下标 * @param endIndex 结束下标 */ private static int partition(int[] arr, int startIndex, int endIndex) { // 取第1个位置(也可以选择随机位置)的元素作为基准元素 int pivot = arr[startIndex]; int left = startIndex; int right = endIndex; while(left != right) { // 控制right指针比较并左移 while(leftpivot) { right--; } // 控制left指针比较并右移 while(left


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3