黑马程序员技术交流社区

标题: 常用排序算法一览 [打印本页]

作者: 男人你得有范    时间: 2014-8-23 21:49
标题: 常用排序算法一览
  1. package com.itheima;

  2. /**
  3. * 第3题: 请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
  4. *
  5. * 目前了解的排序方法有冒泡排序、选择排序、插入排序和快速排序
  6. *
  7. * @author hp-pc
  8. * */
  9. public class Test3
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 // 定义一个int数组并且初始化
  14.                 int[] arr =
  15.                 { 23, 45, 12, 9, 78, 26 };
  16.                 System.out.println("冒泡排序:");
  17.                 bubbleSort(arr);
  18.                 print(arr);
  19.                 System.out.println("\n---------------------");
  20.                 System.out.println("选择排序:");
  21.                 selectSort(arr);
  22.                 print(arr);
  23.                 System.out.println("\n---------------------");
  24.                 System.out.println("插入排序");
  25.                 insertSort(arr);
  26.                 print(arr);
  27.                 System.out.println("\n---------------------");
  28.                 System.out.println("快速排序");
  29.                 quickSort(arr, 0, arr.length - 1);
  30.                 print(arr);

  31.         }

  32.         // 冒泡排序
  33.         public static void bubbleSort(int[] arr)
  34.         {
  35.                 for (int i = 0; i < arr.length - 1; i++)
  36.                 {
  37.                         for (int j = 0; j < arr.length - i - 1; j++)
  38.                         {
  39.                                 if (arr[j] > arr[j + 1])
  40.                                         swap(arr, j, j + 1);
  41.                         }
  42.                 }

  43.         }

  44.         // 选择排序
  45.         public static void selectSort(int[] arr)
  46.         {
  47.                 for (int i = 0; i < arr.length - 1; i++)
  48.                 {
  49.                         for (int j = i + 1; j < arr.length; j++)
  50.                         {
  51.                                 if (arr[i] > arr[j])
  52.                                         swap(arr, i, j);
  53.                         }
  54.                 }
  55.         }
  56.        
  57.         // 插入排序
  58.                 public static void insertSort(int[] a)
  59.                 {
  60.                         for (int i = 1; i < a.length; i++)
  61.                         {
  62.                                 int temp = a[i];// 待插入的值
  63.                                 int index = i;// 待插入的位置
  64.                                 while (index > 0 && a[index - 1] > temp)
  65.                                 {
  66.                                         a[index] = a[index - 1];// 把更大的值赋给待插入的位置,待插入的位置是移动的
  67.                                         index--;// 待插入位置前移
  68.                                 }
  69.                                 a[index] = temp;
  70.                         }
  71.                 }


  72.         // 快速排序
  73.         public static int partition(int a[], int low, int height)
  74.         {
  75.                 int key = a[low];
  76.                 while (low < height)
  77.                 {
  78.                         while (low < height && a[height] >= key)
  79.                                 height--;
  80.                         a[low] = a[height];
  81.                         while (low < height && a[low] <= key)
  82.                                 low++;
  83.                         a[height] = a[low];
  84.                 }
  85.                 a[low] = key;
  86.                 return low;
  87.         }

  88.         public static void quickSort(int a[], int low, int height)
  89.         {
  90.                 if (low < height)
  91.                 {
  92.                         int result = partition(a, low, height);
  93.                         quickSort(a, low, result - 1);
  94.                         quickSort(a, result + 1, height);
  95.                 }
  96.         }

  97.         // 定义一个交换变量值的函数
  98.         public static void swap(int[] arr, int x, int y)
  99.         {
  100.                 int temp = arr[x];
  101.                 arr[x] = arr[y];
  102.                 arr[y] = temp;
  103.         }

  104.        
  105.         // 打印函数
  106.         public static void print(int[] arr)
  107.         {
  108.                 System.out.print("{");
  109.                 for (int i = 0; i < arr.length; i++)
  110.                 {
  111.                         if (i == arr.length - 1)
  112.                                 System.out.print(arr[i] + "}");
  113.                         else
  114.                                 System.out.print(arr[i] + ",");
  115.                 }
  116.         }
  117. }
复制代码



作者: 小黑子    时间: 2014-8-23 22:15
Mark,看看。
作者: 男人你得有范    时间: 2014-8-23 22:16
小黑子 发表于 2014-8-23 22:15
Mark,看看。

:handshake,哥们要去哪一期???该面试了吧
作者: 小黑子    时间: 2014-8-24 12:30
男人你得有范 发表于 2014-8-23 22:16
,哥们要去哪一期???该面试了吧

没有,还不确定呢,基础视频才看一半
作者: abc83983682    时间: 2014-8-24 12:57
不错,支持下
作者: 粺¹³¼畅    时间: 2014-8-24 14:33
不错!!!!
作者: 木易在他乡    时间: 2014-8-24 16:08
快速法比较难搞
作者: liusj    时间: 2014-8-24 21:20
挺好。。。。
作者: 木易在他乡    时间: 2014-8-25 10:09
楼主上图学习下啊
作者: Justfeeling    时间: 2014-8-25 10:40
楼主够认真详细的!收藏ing




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2