JAVA中常见的排序算法有哪些?---冒泡排序

排序相关的的基本概念

排序:
将一组杂乱无章的数据按一定的规律顺次排列起来。
数据表( data list): 它是待排序数据对象的有限集合。
排序码(key):通常数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为排序码。每个数据表用哪个属性域作为排序码,要视具体的应用需要而定。

我们常见的一些排序算法,如图所示:

交换排序

交换排序的基本思想是:两两比较待排序记录(数据表)的关键字(排序码),发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。主要包括冒泡排序和快速排序。
现在,我们先一起来看看交换排序 之 冒泡排序

冒泡排序的原理

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

一听到冒泡这个词,大家可能会想到?

对,没错,我们可以把冒泡排序看成生活中冒气泡的方式,从下往上冒,依次把最大或最小的值冒到最顶层。
例如:有一个整型数组int[] nums = {84,83,88,87,61};
其排序后的结果,如图:

接下来,我们更进一步来分析它的比较过程:

冒泡排序的代码实现

i : 控制第几轮,如果5个数,最多就比较4轮,所以i的索引从0开始的话,要循环4次,就应该是长度-1
j: 控制每一轮中的元素下标位置,每结束一轮,就会出来一个当前这轮中的最大值,则减i,之所以再减1,是因为最后剩一个元素的时候没有相邻的数与其分组,所以不用再比较了

1
2
3
4
5
6
7
8
9
10
for(int i = 0 ;i<nums.length-1;i++){
for(int j = 0;j<nums.length-i-1){
if( nums[j] > nums[j+1]){ //相邻的两个元素比较
int temp;//借用第三个变量来达到两个元素的交换,如同交换两瓶水,需要第三个空瓶子
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}

以上则是交换排序之冒泡排序的算法原理和具体实现步骤,敬请期待java中的其他排序算法