[关闭]
@chenbinghua 2015-08-16T11:23:50.000000Z 字数 849 阅读 1165

教科书的5道最常见算法题

未分类


一、二分查找

  1. public int binarySearch(int[] a, int key) {
  2. if (a == null) {
  3. return -1;
  4. }
  5. int low = 0, high = a.length - 1;
  6. while (low < high) {
  7. int mid = (low + high) / 2;
  8. if (a[mid] == key) {
  9. return mid;
  10. } else if (a[mid] > key) {
  11. high = mid - 1;
  12. } else {
  13. low = mid + 1;
  14. }
  15. }
  16. return -1;
  17. }

二、冒泡算法

  1. public void bubbleSort(int[] a) {
  2. int temp;
  3. for (int i = 1; i < a.length; i++) {
  4. for (int j = 0; j < a.length - i; j++) {
  5. if (a[j + 1] < a[j]) {
  6. temp = a[j];
  7. a[j] = a[j + 1];
  8. a[j + 1] = temp;
  9. }
  10. }
  11. }
  12. }

三、快速排序

  1. public void quickSort(int[] a) {
  2. // 使用qSort函数封装排序细节
  3. qSort(a, 0, a.length - 1);
  4. }
  5. public void qSort(int[] a, int low, int high) {
  6. if (low < high) {
  7. int qivot = Partition(a, low, high);
  8. qSort(a, low, qivot - 1);
  9. qSort(a, qivot + 1, high);
  10. }
  11. }
  12. public int Partition(int[] a, int i, int j) {
  13. // 1.取第一记录为支点
  14. int pivot = a[i];
  15. // 2.将小于支点的记录放支点左边,将大于支点的记录放右边
  16. while (i<j) {
  17. while(i<j && pivot <= a[j]){
  18. j--;
  19. }
  20. if (i<j) {
  21. a[i] = a[j];
  22. i++;
  23. }
  24. while(i<j && pivot > a[i]){
  25. i++;
  26. }
  27. if (i<j) {
  28. a[j] = a[i];
  29. j--;
  30. }
  31. }
  32. // 3.将支点放到中间位置,这时 i == j
  33. a[i] = pivot;
  34. // 4.返回支点位置
  35. return i;
  36. }

四、堆排序

五、归并排序

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注