交流一下我对冒泡排序的理解。有不对的地方还希望各位同学指出。
对下列一组无序数字做降序排序。
5,9,36,16,48,2,14,55,41,23
冒泡排序的核心思想就是 相邻的两个数字之间进行比较,比如5和9比,5<9,9和5交换位置9就处在了第一位上。然后5再跟36比,5<36,同样交换位置36处在了第二位上。……以此类推的5再继续比下去。当5和2比较时,5>2,此时5就不于2交换位置了(因为做的是降序)。接下去就是2和之后的数字比较,直到2被交换到了最后的位置。冒泡排序的特点是每一轮比较过后都有一个最值(最大或最小)被置于末端。(这个取决于降序还是升序)。也就是说每轮比较过后下一轮都会少比较一次,因为上一轮比较已经找到了最值,第二轮比价只要找到次值就可以了,后面的以此类推。这就是冒泡的思想,不知道我说的够不够通俗易懂。下面用代码体现一下。
/*
冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
*/
class ArrayTest
{
public static void main(String[] args)
{
int[] arr = {4,5,8,7,100,203,56,54,2,4,2,14}; //进行降序排序
printArray( arr);
bubbleSort(arr);
printArray( arr);
}
public static void bubbleSort(int[] arr)
{
for(int x = 0;x<arr.length-1;x++)
{
for(int y = 0;y<arr.length-x-1;y++) // -x:让每一次比较的次数减少。-1:避免角标越界比较。
{
if(arr[y]<arr[y+1])
{
jiaohuan(arr,y,y+1);
}
}
}
}
public static void jiaohuan(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x = 0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
} |
|