什么是冒泡排序呢?
简单来说
就是第一轮就是第一个和第二个比较.
然后第二个与第三个比较.
第三个与第四个比较.
第四个和第五个比较....以此类推,直到最后一个两两比较
.
然后第二轮就是第一个和第二个比较.
第二个和第三个比较.
第三个和第四个比较,
第四个与第五个比较....依次类推,直到上一轮比较的个数减1个
(比如这个数组是10个, 然后上一轮比较了10个, 那么这一轮就比较9个)
然后第三轮就是第一个和第二个比较.
第二个和第三个比较.
第三个和第四个比较,
第四个与第五个比较....依次类推,直到上一轮比较的个数减1个
(比如这个数组是10个, 然后上一轮比较了9个, 那么这一轮就比较8个)
.
这里我用Java的语法假设我们定义了一个数组a[5],然后赋值.
int[] arr = {18, 6, 19, 3, 9};
画个图是这样的
下标为0的开始的进行比较
我们求它的升序-----也就是说从小到大
画图是这样的(图很多下面有链接可以直接下载看)
然后第二轮重新从下标0开始比较
然后第三轮也重新从下标0开始比较
最后进行第四轮第1次比较
这样我们就完成了冒泡排序
简略型图解
图片链接:百度网盘
下面是java源代码
public class day05_08 { //类名
public static void main(String[] args){ //主函数
int[] arr = {18, 6, 19, 3, 9}; //定义一个数组
int temp; //定一个临时变量, 可以进行互换
System.out.print("排序前的数组:");
for(int i = 0; i < arr.length; i++) //排序前遍历输出
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
System.out.println(); //换行
for(int i = 0; i < arr.length-1; i++) //因为最后一个不用进行比较,所以长度要减1
{
for(int j =0; j < arr.length-1-i; j++) //j必须小于数组的长度减1避免越界
{ //然后减i是因为每次经过i次循环后,后面就要有i个不进行比较的
if(arr[j] > arr[j+1]) //大于就互换, 因为这里是要升序
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.print("排序后的数组:");
for(int i = 0; i < arr.length; i++) //排序后遍历输出
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
}
}
代码执行之后的结果
下面这个是利用自定义函数写的源代码:
public class day05_09 { //类名
public static void main(String[] args){ //主函数
int[] arr = {18, 6, 19, 3, 9}; //定义一个数组
printArray(arr); //输出排序前的数组
sort(arr); //冒泡排序
printArray(arr); //输出排序后的数组
}
//函数功能:冒泡排序
public static void sort(int[] arr){
for(int i = 0; i < arr.length-1; i++) //因为最后一个不用比较,所以数组长度要减1
{
for(int j = 0; j < arr.length-1-i; j++) //这里如果不减1,数组会越界
{ //减i是因为每次循环一次,后面就有一个已经是最大值,所以执行i次就减i
if(comparison(arr[j], arr[j+1]))
{
swap(arr,j,j+1);
}
}
}
}
//函数功能:比较两个数的大小,如果第一个大就true, 第二个大就false
public static boolean comparison(int a, int b) {
if(a > b)
{
return true;
}
else
{
return false;
}
}
//函数功能:数值互换
public static void swap(int[] arr, int i, int j) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//函数功能:输出数组
public static void printArray(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
System.out.println();
}
}
输出的结果还是和上图一样的,这里就不放出来了
不管用什么语言写代码,本质上都是这样子实现的!