冒泡排序算法和选择排序算法
冒泡排序算法
冒泡排序算法简单来说就是:一串数字,相邻的两个数进行两两比较,如果这两个数字的顺序不满足自己想要排序的要求,就让这两个数交换位置,具体解释如下:
给如下一串没有顺序的数(升序)
12 9 15 5 0
第一轮比较 (比较4次,最大的数值到了最后一位)
9 12 5 0 15
第二轮比较(比较3次,倒数第二位也排好难)
9 5 0 12 15
第三次比较(比较2次,倒数第三位排好)
5 0 10 12 15
第四次比较(比较一次)
0 5 10 12 15
从上边观察可以了解到,第一轮比较的话,可以使用一次循环即可以实现,一共需要四轮循环比较,可以使用嵌套循环来实现,外层循环控制比较轮数,内层控制比较次数,代码如下:
//定义一个数组:12 9 15 5 0
int[] arr = {12,9,15,5,0};
int temp;//用于调换位置
for(int i=0;i<arr.length-1;i++){//外层循环控制循环轮数,循环轮数总比数的个数少1
for(int j =0;j<arr.length-1-i;j++){
//内层控制每一轮的比较次数,(从上数据可发现每轮比较次数依次为4,3,2,1;每轮次数一次减1,而输的个数减i值再减1正巧是循环次数的值)
if(arr[j]>arr[j+1]){//开始比较,不满足要求的调换顺序
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
//打印验证
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]+"\t");
}
//打印结果 0 5 9 12 15
选择排序算法
选择排序算法即在选择第一个数与与其他数依次进行比较,不满足排列顺序两个数交换位置,最终找出最大(或最小)的数,具体解释如下:
给一串数(升序)
12 5 9 10 0
第一个与其他的依次比较,取小的再与剩下的数依次比较,依次类推找出最小的数
第一轮 比较4次
0 12 9 10 5
第二轮 比较3次
0 5 12 10 9
第三轮 比较2次
0 5 9 12 10
第四轮 比较1次
0 5 9 10 12
与冒泡排序算法相同,同样可以使用两层循环来排序,用来控制每一轮的比较次数,外层用来控制比较层数,具体代码实现如下:
//定义一个数组:
int[] num = {12,5,9,10,0};
int number;//用来交换顺序
for(int i=0;i<num.length-1;i++){//控制循环轮数,轮数比长度少1
for(int j=i+1;j<num.length;j++){
//若以num[i]作为第一个数,那么比较的那个数应该为i+1,
//以num[j]作为比较的数,j=i+1;
//想每轮比较次数依次递减,则需要小于num.length
if(num[i]>num[j]){//不符合要求的交换顺序
number=num[j];
num[j]=num[i];
num[i]=number;
}
}
}
//遍历验证
for(int i=0;i<num.length;i++){
System.out.println(num[i]+"\t");
}
冒泡排序与选择排序在同为升序的情况下(所选择的数据都是从前边开始选的情况下),冒泡排序先找出最后的数(从后向前依次排序),选择排序先找出第一个数(从前向后依次排序)。