最近想练一练Java的算法,然后碰到LeetCode上一道从排序数组删除重复项的小题,刚开始没看到是从排序数组中,就乱写,其实要是排序树组,就比乱序的感觉上好写多了。然后就想回顾下冒泡法对数组排序,凭感觉写的,写到最后成了选择排序……呃……
简单对冒泡法和选择排序法介绍一下。
冒泡法是两两比较,两两交换,逐渐的把最大的弄到最后(最前),最小的弄到最前(最后)。网上有很多例子。
而选择排序法是每次都选出最小的放到最前(最后),然后再从剩下的数里面选出里面最小的再放到第二位(倒数第二位)。
1 public class Solution { 2 public static void main(String[] args) { 3 int[] nums = {10, 12, 6, 4, 8, 3, 7, 23, 65, 12}; 4 for (int i = 0; i < nums.length; i++) { //第一个for循环 5 int n = nums[i], a = i, change; //定义第二个for循环需要用的东西 6 for (int j = i; j < nums.length - 1; j++) { //每次都让j=i,想要做的是在第i个以及以后选择最小的放到第i位 7 if (nums[j + 1] < n) { //如果下一个比n小,就让n等于下一个,for循环结束时n就是最小的 8 n = nums[j + 1]; 9 } 10 for (int x = 0; x < nums.length; x++) { //这个for循环的作用是找到最小的那一位数并用a记录 11 if (n == nums[x]) { 12 a = x; 13 } 14 } //内for结束 15 } //外for结束 16 change = nums[i]; //把最小的和第一位交换 17 nums[i] = nums[a]; 18 nums[a] = change; 19 } 20 for (int x : nums) { //foreach输出数组 21 System.out.print(" " + x); 22 } 23 24 } 25 }
可能我潜意识里就觉得选择排序法思路更清晰一些吧……好像执行速度还挺短的,以后也会多进行这样的小练习。