排序--冒泡排序和快速排序(java)
来源:互联网 发布:东芝移动硬盘 mac 加密 编辑:程序博客网 时间:2024/05/20 02:55
最近在准备面试和笔试,所以系统的复习下排序算法,本想着将排序算法一起写到一篇博客的,后来发现排序算法太多了,不写文字就写程序也会有很大的篇幅。因此决定分开写,本文介绍冒泡排序和快排两种算法。本文基于数据结构(c语言版--严蔚敏)的教材写的,程序用java实现。书中的文字还是有点字面语,我用大白话讲解。好,开始。(本文都是给一个无序的数组排序,设数组为a)本文代码本人亲测!!!
博客三部曲:1、文字描述 2、图片深入 3、程序辅助
1、起泡排序
比较数组中的前两个值,如果第一个数大于第二个数,则这两个数构成了一个逆序对(a[1] > a[2]),交换这两个数。然后比较第二个数和第三个数。以此类推,直到第n-1个数和第n个数比较为止。上面说的这个过程为一次冒泡排序,注意:是一次,并不是冒泡排序就完事了。这一过程之后会发现,数组中的最大的元素已经到了数组最后的位置。当然,也可以反着来,从后往前来,就是第n个数小于第n-1个数,则交换,如果这样的话,经过一次排序后最小的值会到数组的第一个元素的位置。然后进行第二趟起泡排序,对前n-1个数进行同样的操作。如下图:
气泡排序:java代码
public static void bubble(int[] a ){for(int i = 0; i < a.length; i ++)for(int j = 0; j < i; j++)if(a[j] > a[i]){int temp = a[i];a[i] = a[j];a[j] = temp;}}2、快速排序(快排)
为什么快排和气泡排序放在一起呢?因为快排是对起泡排序的一种改进。基本思想:通过一趟排序将待排序的记录(数)分割成独立的两部分,其中一部分记录的数比另一部分记录的数小,然后在对这两部分记录继续进行上述过程。看到这里是不是在想,递归实现,本文即用递归实现快速排序。
快排过程:首先在要排序的序列 a 中选取一个中轴值(通常选数组的第一个值),而后将序列分成两个部分,其中左边的部分 b 中的元素均小于或者等于 中轴值,右边的部分 c 的元素 均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。
快排和起泡排序很像,这两种排序都是先将一个值找到它最终的位置。气泡排序找到的最终位置是最大的元素(或者最小的元素)所在的位置,也就是数组最后的位置。而快排是找到了中间的一个数的最终位置。
上图:
快速排序(快排)java程序:(递归实现)
public static void q_Sort(int[] a, int low, int high){if(low < high){int p = Partition(a, low, high);q_Sort(a, low, p - 1);q_Sort(a, p + 1,high);}}public static int Partition(int a[], int low, int high){int p = a[low];while(low < high){while(low < high && a[high] >= p) --high;a[low] = a[high];while(low < high && a[low] <= p) ++low;a[high] = a[low];}a[low] = p;return low;}
- 排序--冒泡排序和快速排序(java)
- java的冒泡排序和快速排序
- 冒泡排序和快速排序java实现
- Java的冒泡排序和快速排序.
- java实现冒泡排序和快速排序
- java实现冒泡排序和快速排序
- 冒泡排序和快速排序(java实现)
- java 快速排序,冒泡排序
- java 冒泡排序、快速排序
- 快速排序和冒泡排序
- 冒泡排序和快速排序
- 冒泡排序和快速排序
- 冒泡排序和快速排序
- 冒泡排序和快速排序
- 冒泡排序和快速排序
- 冒泡排序和快速排序
- 快速排序和冒泡排序
- 冒泡排序和快速排序
- MVC基本原理
- RabbitMQ学习总结(二)
- JAVA运算符\操作符
- Tesseract ocr文字识别
- Torch load model from gpu to cpu, so can convert to pytorch
- 排序--冒泡排序和快速排序(java)
- 使用yii AR 完成单个表的CURD操作
- 在redis中优化频繁操作redis产生多次链接引发的网络延时
- javascript/js 获取当前页面地址栏数据
- tensorflow进行MNIST手写数字识别-CNN
- windows下MongoDB的安装及配置
- docker swarm
- CodeForces
- MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。