一天一个系列的第一篇,看看自己能否坚持下去,加油!
冒泡排序与快速排序
冒泡排序,人生中第一次面试,nice的考官问我能不能默写下来
快速排序,感觉高大上,分治思想,必学
1 package One; 2 3 public class Test_sort { 4 5 public static void main(String[] args) { 6 int[] a = { 2, 9, 5, 4, 8, 1 }; 7 // sort(bubble_sort); 8 quick_sort(a, 0, a.length - 1); 9 for (int i = 0; i < a.length; i++) { 10 System.out.print(a[i] + " "); 11 } 12 } 13 14 // 冒泡排序 15 public static int[] bubble_sort(int[] a) { 16 // 设置判断,进行优化 17 // 如果某次遍历中没有发生交换,那么就不用再进行下去,因为排序已完成 18 boolean ac = true; 19 for (int k = 1; k < a.length & ac; k++) { 20 ac = false; 21 for (int i = 0; i < a.length - 1; i++) { 22 if (a[i] > a[i + 1]) { 23 int temp = a[i]; 24 a[i] = a[i + 1]; 25 a[i + 1] = temp; 26 ac = true; 27 } 28 } 29 } 30 return a; 31 } 32 33 // 快速排序 34 public static int[] quick_sort(int s[], int l, int r) { 35 if (l < r) { 36 // Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 37 int i = l, j = r, x = s[l]; 38 while (i < j) { 39 // 从右向左找第一个小于x的数 40 while (i < j && s[j] >= x) 41 j--; 42 if (i < j) 43 s[i++] = s[j]; 44 45 // 从左向右找第一个大于等于x的数 46 while (i < j && s[i] < x) 47 i++; 48 if (i < j) 49 s[j--] = s[i]; 50 } 51 s[i] = x; 52 quick_sort(s, l, i - 1); // 递归调用 从右至左 53 quick_sort(s, i + 1, r); // 从左至右 54 } 55 return s; 56 } 57 }
时间: 2024-10-10 11:10:21