`
tianyalinfeng
  • 浏览: 445922 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

排序算法

    博客分类:
  • Java
 
阅读更多

public class SortUtil {
 public static void main(String[] args) {
  int[] data = { -1, 1, 42, 22, 61, 44, 12, 34 };// data[0]是辅助空间
  System.out.print("the original array:");
  print(data);
  // insertSort(data);
  // bInsertSort(data);
  // bubbleSort(data);
  quickSort(data, 1, data.length - 1);
  print(data);
 }

 private static void print(int[] data) {
  for (int i = 1; i < data.length; i++) {
   System.out.print(data[i] + " ");
  }
  System.out.println();
 }

 /**
  * 直接插入排序 时间复杂度:平均情况-O(n2) 最坏情况-O(n2) 辅助空间:O(1) 稳定性:稳定
  */
 private static void insertSort(int[] data) {
  int i, j;
  for (i = 1; i < data.length; i++) {
   if (data[i] < data[i - 1]) {
    data[0] = data[i];
    for (j = i - 1; data[0] < data[j]; j--) {
     data[j + 1] = data[j];
    }
    data[j + 1] = data[0];
   }
  }
 }

 /**
  * 折半插入排序 时间复杂度:平均情况-O(n2) 稳定性:稳定
  */
 private static void bInsertSort(int[] data) {
  int i, j, high, low, m;
  for (i = 1; i < data.length; i++) {
   data[0] = data[i];
   low = 0;
   high = i - 1;
   while (low <= high) {
    m = (low + high) / 2;
    if (data[0] < data[m]) {
     high = m - 1;
    } else {
     low = m + 1;
    }
   }
   for (j = i - 1; j >= high + 1; j--) {
    data[j + 1] = data[j];
   }
   data[high + 1] = data[0];
  }
 }

 /**
  * 时间复杂度:平均情况—O(n2) 最坏情况—O(n2) 辅助空间:O(1) 稳定性:稳定
  */
 private static void bubbleSort(int[] data) {
  for (int i = data.length - 1; i >= 2; i--) {
   for (int j = 1; j < i; j++) {
    if (data[j] > data[j + 1]) {
     data[0] = data[j];
     data[j] = data[j + 1];
     data[j + 1] = data[0];
    }
   }
  }
 }

 /**
  * 时间复杂度:平均情况—O(nlog2n) 最坏情况—O(n2) 辅助空间:O(log2n) 稳定性:不稳定
  */
 private static void quickSort(int[] data, int low, int high) {
  if (low < high) {
   int pivotloc = partition(data, low, high);
   quickSort(data, low, pivotloc - 1);
   quickSort(data, pivotloc + 1, high);
  }
 }

 private static int partition(int[] data, int low, int high) {
  data[0] = data[low];
  int pivotkey = data[low];
  while (low < high) {
   while (low < high && data[high] >= pivotkey) {
    high--;
   }
   data[low] = data[high];
   while (low < high && data[low] <= pivotkey) {
    low++;
   }
   data[high] = data[low];
  }
  data[low] = data[0];
  return low;
 }
}

分享到:
评论

相关推荐

    常用排序算法的动态演示系统

    在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,广泛应用于各种数据处理和分析...

    常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx

    常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...

    查找与排序算法的实现和应用

    常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...

    总结了各种排序算法,并用C++代码实现,并有演示

    在计算机科学领域,排序算法是数据处理中的核心部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型...

    直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现)

    希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...

    C经典算法之合并排序法

    本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...

Global site tag (gtag.js) - Google Analytics