问题:设有一数组,其大小为10个元素(int str[10])数组内的数据是无序。现在要求我们通过编程将这个无序的数组变成一个从大到小的排序的数组(从下标为0开始)
思路:按照题目的要求,毫无疑问,正确的结果应该就像这样:10,9,8,7,6,5,4,3,2,1,0 要做到这样,最简单和最直接想到的方法就是进行对比交换。
代码:
package com.zgb.algoritm.sort; /** * * @author Mr.Zhang * */ public class BubbleSort { public static void main(String[] args) { int array[] = new int[] { 10,9,8,7,6,5,4,3,2,1,0 }; bubblesort(array); } public static void bubblesort(int array[]) { int temp = 0; for (int i = 0; i < array.length - 1; i++) { // 有n个数,就要比较n-1次 for (int j = 0; j < array.length - 1 - i; j++) { //每次找一个最大的数,那么第i次只需比较array.length - 1 - i次 if (array[j] > array[j + 1]) { //比较 //交换位置 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } for (int i = 0; i < array.length; i++) { System.out.printf("]", array[i]); } } }
首先,把10个数里最大的个数放到下标为10的位置上(str[10])(如何实现,看下步骤,这句话是思路) 通过将下标为0的数(str[0])与剩下其余9个数进行对比交换(将较少者放置在下标为0的位置上),就可以得到这10个数最大的那个 10个数最大的那位确定后,接下来就要找剩下9个数最大的那个。 因为已经确定出一个最小的数,所以就不要动str[0],直接从str[1]开始,与剩下的8个数对比交换,找出9个数中最大的那位放到下标为9(str[9])的位置上 继续按照这个思路就可以将这十个数变成有序的(从大到小)的数组