a从1开始取就好了。或者b的最大值小于array.length-a-1。
- /**
- * @author 史云龙
- * 完成数组的快速排序
- * 数组【100,40,60,87,34,11,56,0】
- *冒泡排序:
- *从小到大排列
- */
- public class BubbleSort {
- /**
- * @param args
- * 主函数
- */
- public static void main(String[] args) {
-
- int[] array = {100,40,60,87,34,11,56,0};
- sop("未进行快速排序的数组:");
- print(array);
- sop("已经进行快速排序的数组:");
- sort(array);
- print(array);
- }
-
- /**
- * @param array
- * 冒泡排序[从小到大排序]
- * 算法说明:
- * 1、比较相邻的元素。
- * 第1次比较第一个和第二个元素。
- * 第2次比较第二个和第三个元素。
- * 依次比较,如果前一个比后一个大则交换位置。
- * 第一轮比较后,将最大的元素移到最后一个位置。
- * 2、因为还有进行后续轮数比较故用两个循环
- * 外层循环表示,轮数。
- * i表示轮数
- * 内层循环表示,当前轮数,数组内元素比较。
- * j表示元素内数组的位置。
- * 3、每一轮比较取出一个最大的数,故需要比较array.length-1次。
- * 比较array.length-1次后剩余一个元素,不需要比较。
- * 每一次比较后,最大的数在最后故在元素内比较时,
- * 最后i个位置不要比较,同时在比较倒数最后两个位置时,
- * 需要考虑数组越界问题即j需要小于array.length-i
- * 即最大值为array.length-i-1。
- */
- public static void sort(int[] array){
- for(int i=1;i<array.length;i++){
- for(int j=0;j<array.length-i;j++){
- if(array[j]>array[j+1]){
- swap(array,j,j+1);
- }
- }
- }
- /*
- for(int i=0;i<array.length-1;i++){
- for(int j=0;j<array.length-i-1;j++){
- if(array[j]>array[j+1]){
- swap(array,j,j+1);
- }
- }
- }
- */
- }
- /**
- * @param b【传入数组并进行打印】
- */
- public static void print(int[] b){
- for (int i=0;i<b.length;i++){
- sop(b[i]);
- if(i==b.length-1){
- sop("\n");
- }else{
- sop(" , ");
- }
- }
-
- }
- /**
- * @param array
- * @param i
- * @param j
- * 将符合条件的数组数据交换位置
- */
- public static void swap(int[] array,int i,int j){
- int temp = array[i];
- array[i]=array[j];
- array[j]=temp;
-
- }
- /**
- * @param obj[将obj输出]
- */
- public static void sop(Object obj){
- System.out.print(obj);
- }
复制代码
|