`
nkliuliu
  • 浏览: 210530 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java排序算法及复杂度

 
阅读更多

冒泡排序:

 

public class Bubble {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = { 77, 1, 65, 13, 81, 93, 10, 5, 23, 17 };
		for (int m = a.length - 1; m > 0; m--) {
			for (int n = 0; n < m; n++) {
				if (a[n] > a[n + 1]) {
					int temp = a[n];
					a[n] = a[n + 1];
					a[n + 1] = temp;
				}
			}
		}
		for (int i : a) {
			System.out.println(i);
		}
	}

}

 

 复杂度分析:冒泡排序是不稳定的排序算法,一共要比较((n-1)+(n-2)+...+3+2+1)=n*(n-1)/2次,所以时间复杂度是O(n^2)。

 

 快速排序:

 

public class QuickSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] initArray = { 1, 545, 23, 334, 876, 222, 111, 8, 9, 7, 6, 57, 89,
				0, -23, 670 };
		qsort(initArray, 0, initArray.length - 1);
		outprint(initArray);
	}

	public static void outprint(int[] initArray) {
		for (int i : initArray) {
			System.out.println(i);
		}
	}

	public static void swap(int[] array, int a, int b) {
		System.out.println("a=" + a);
		System.out.println("b=" + b);
		int temp = array[b];
		array[b] = array[a];
		array[a] = temp;
	}

	public static int getPivotIndex(int[] array, int begin, int end) {
		Random r = new Random();
		return begin + r.nextInt(end - begin + 1);
	}

	public static void qsort(int[] array, int begin, int end) {
		if (end > begin) {
			int index = getPivotIndex(array, begin, end);
			index = portions(array, begin, end, index);
			qsort(array, begin, index - 1);
			qsort(array, index + 1, end);
		}
	}

	public static int portions(int[] array, int begin, int end, int index) {
		int pivot = array[index];
		swap(array, index, end);
		for (int i = index = begin; i < end; i++) {
			if (array[i] < pivot) {
				swap(array, index++, i);
			}
		}
		swap(array, index, end);
		return index;
	}
} 

 最坏情况是和冒泡一样,时间复杂度是O(n^2) ,最好为n*logn

 

 插入排序:

 

public class InsertSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] array = { 77, 1, 65, 13, 81, 93, 10, 5, 23, 17 };
		isort(array, 0, array.length);
		outprint(array);
	}

	public static void outprint(int[] initArray) {
		for (int i : initArray) {
			System.out.println(i);
		}
	}

	public static void swap(int[] array, int a, int b) {
		int temp = array[b];
		array[b] = array[a];
		array[a] = temp;
	}

	public static void isort(int[] array, int begin, int end) {
		for (int i = begin; i < end; i++) {
			int temp = array[i];
			for (int m = i - 1; m >= 0; m--) {
				if (temp < array[m]) {
					array[m + 1] = array[m];
					array[m] = temp;
				} else {
					break;
				}
			}
		}
	}
}

 最好的情况是:顺序已经排好那么我们只要进行n-1次比较即可。
 最坏的情况是:顺序恰好是逆序,比较1+2+...+n-1次。

 平均时间复杂度也是O(n^2).

分享到:
评论

相关推荐

    排序算法时间复杂度的分析java语言描述

    在分析排序算法的时间效率时,我们通常会使用大O表示法,它提供了一个关于算法运行时间增长的上限估计。理论分析结合经验分析,例如通过计时测试,可以帮助我们更好地理解这些算法在不同输入条件下的性能表现。在...

    Java 数组递归算法的复杂度

    综上所述,本文通过对几种典型排序算法及递归算法的时间复杂度进行分析,旨在帮助读者更好地理解这些算法的工作原理和性能特点。在实际应用中,根据具体情况选择合适的算法至关重要,以确保程序的高效运行。

    Java数组排序总结(冒泡_选择_插入_希尔)__递归算法的复杂度

    在编程领域,数组排序是基础且重要的操作,尤其是在Java中。...总之,掌握各种排序算法及其复杂度是Java程序员的基础技能之一。通过深入学习和实践,我们可以更好地应对各种排序问题,提高程序的运行效率。

    基于二分排序法时间复杂度的求解过程.pdf

    论文还提供了JAVA语言对二分查找排序法的实现代码,详细介绍了算法的描述和实现过程。通过对二分查找排序法的时间复杂度分析,论文得出了结论,即二分查找排序法的时间复杂度为O(logn)。这表明,二分查找排序法是一...

    各种排序算法的稳定性和时间复杂度小结

    稳定性和时间复杂度是评估排序算法性能的两个关键指标。 【稳定排序算法】指的是在排序过程中,相等元素的相对顺序不会改变。例如,冒泡排序、插入排序、归并排序和基数排序都是稳定的。冒泡排序通过相邻元素的比较...

    Java各种排序算法_随机数

    Java 排序算法概述 Java 排序算法是指在 Java 编程语言中使用的各种排序方法,旨在对数据进行有序排列。常见的排序算法有插入排序、交换排序、选择排序、归并排序、分配排序等。 插入排序是最基本的一种排序算法,...

    各种排序算法比较(java实现)

    本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...

    Java排序算法大全

    Java排序算法大全是一份专为Java开发者准备的学习资源,涵盖了各种经典的排序算法,旨在帮助初学者和有经验的程序员深入理解排序的原理和实现。排序是计算机科学中的基础且重要的概念,它在数据处理、数据库操作、...

    Java排序算法.pdf

    Java 排序算法详解 Java 排序算法是指在 Java 编程语言中使用的各种排序算法,旨在对数据进行排序和组织。这些算法可以分为五大类:插入排序、交换排序、选择排序、归并排序和分配排序。 插入排序 插入排序是一种...

    Java排序算法(桶排序,基数排序等)

    Java 中实现排序算法通常涉及到多种方法,每种算法都有其特定的适用场景和性能特点。下面将详细介绍标题和描述中提到的一些常见排序算法,并提供Java实现。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观...

    分析算法时间复杂度java.zip

    例如,排序算法中,冒泡排序的时间复杂度为O(n^2),而快速排序的平均时间复杂度为O(nlogn)。在处理大量数据时,选择时间复杂度更低的算法能显著提升程序性能。 总之,"分析算法时间复杂度java.zip"文件中的内容将...

    java排序算法效率比较

    在Java编程语言中,排序算法是数据结构与算法学习中的重要组成部分。本实验通过生成大量随机数并写入文件,然后使用四种不同的排序算法进行排序,以比较它们的效率。以下是对这四种排序算法的详细解释: 1. **冒泡...

    面试笔试必用-必须掌握Java排序算法.docx

    Java 排序算法详解 Java 排序算法是 Java 编程语言中的一种常用算法,用于对数组或列表进行排序。排序算法的选择取决于数据的规模、类型和已有的顺序。 分类 Java 排序算法可以分为五类:插入排序、交换排序、...

    Java排序算法代码

    根据提供的文件信息,我们可以总结出以下几个关键的排序算法知识点: ### 1. 插入排序 (Insertion Sort) 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后...

    Java各种排序算法(含代码)

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,了解和掌握各种排序算法对于提升程序性能至关重要。以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)*...

    JAVA排序算法集合

    以上介绍了Java排序算法中常见的几种方法及其变体。每种算法都有其特点和适用场景,例如当数据量较小时可以选择直接插入排序或直接选择排序;当数据量较大时,归并排序和快速排序则更为合适。理解这些算法的工作原理...

    java实现数据结构常见排序算法及详解

    ### Java 实现数据结构常见排序算法及详解 #### 排序算法概述 排序算法是计算机科学中的基础概念之一,主要用于将一系列数据按照特定规则进行排列。根据数据处理方式的不同,排序算法大致分为两大类:比较排序与非...

    Java排序算法 Java排序算法.rar

    Java排序算法涉及了多种方法,用于组织数组或集合中的元素,使其按照特定顺序排列。以下是对这些算法的详细解释: 1. **冒泡排序(Bubble Sort)** 冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一...

Global site tag (gtag.js) - Google Analytics