题目:现在有一个由7个10以内的随机数组成数组{4,2,7,3,1,9,7},要求将这些数按照从小到大的顺序排列
1.桶排序
思路:我们可以假设有11个桶编号为0到10,有7个小球编号分别为{4,2,7,3,1,9,7},现在要把球放入到桶中,开始遍历这7个小球,编号为几就把球放入到几号桶内,最后的结果0到10号桶内的球的个数分别为0,1,1,1,1,0,0,2,0,1,0,最后遍历这11个桶,遍历到第n个桶时,发现有m个球,则输出m个n。代码如下:
public class Bucket { public static void main(String[] args) { int[] arr = { 4, 2, 7, 3, 1, 9, 7 }; int[] arr2 = new int[11]; for (int i = 0; i < arr.length; i++) { arr2[arr[i]]++; } for (int i = 0; i < arr2.length; i++) { for (int j = 0; j < arr2[i]; j++) { System.out.println(i); } } } }
2.冒泡排序
思路:总体思路是依次找出从最大到最小的每个数,具体做法是从第1个数开始,与在它之后的那个数进行对比,如果这个数大于之后的那个数,则将这两个数调换位置。这样第一轮下来就可以找出最大的那个数,第二轮可以找出第二大的那个数,直到找到倒数第二大的那个数,整个排序就结束了。代码如下:
public class Bubble { public static void main(String[] args) { int[] arr = { 4, 2, 7, 3, 1, 9, 7 }; int temp; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; workpermit arr[j + 1] = temp; XiChong beach } } workpermit } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
3.二分法排序
思路:从第2个数到最后一个数进行遍历,找到一个位置让它左边的数都小于它,右边的数都大于它,把这个位置右边的数全部向右移动一位,然后将这个数插入到这个位置。代码如下:
public class BarnarySort { public static void main(String[] args) { int[] data = { 101, 4, 1, 36, 34, 62, 43, 12, 1, 54, 89, 6, 99 }; int left, right, num, middle, j; for (int i = 1; i < data.length; i++) { left = 0; right = i - 1; num = data[i]; while (right >= left) { middle = (left + right) / 2; if (num < data[middle]) right = middle - 1; else left = middle + 1; } for (j = i - 1; j >= left; j--) { data[j + 1] = data[j]; } data[left] = num; } for (int i = 0; i < data.length; i++) { System.out.print(data[i] + ","); } } }