`

常见排序算法的分析与实现

阅读更多

本文仅实现了冒泡排序、选择排序,插入排序和快速排序,仅供参考学习。

性能体验:冒泡—>选择—>插入—>快排。

 

 

冒泡排序:

 

	/**
	 * 冒泡排序—最简单的排序 
	 * 稳定性:稳定 
	 * 时间复杂度:O(n^2)
	 */
	public void BubbleSort(int a[]) {
		// 用于交换两个数的值
		int temp;

		for (int i = 0; i < a.length - 1; i++) {
			for (int j = 0; j < a.length - 1 - i; j++) {
				// 前后两个数比较,大的数后移(向后冒泡)
				if (a[j] > a[j + 1]) {
					temp = a[j + 1];
					a[j + 1] = a[j];
					a[j] = temp;
				}
			}
			// 大的数向后移动
		}
		// 结束
	}

 

 

选择排序:

 

        /**
	 * 升序 
	 * 选择排序—找出最小数,然后交换当前最小数 
	 * 稳定性:不稳定 
	 * 时间复杂度:O(n^2)
	 */
	public void SelectSort(int[] a) {
		int temp = 0;
		int min;
		int index;

		for (int i = 0; i < a.length - 1; i++) {
			min = a[i];
			index = i;
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] < min) {
					// 记录最小元素的位置
					index = j;
					// 更新最小值
					min = a[j];
				}
			}
			if (i != index) {
				// 找到最小值,交换位置
				temp = a[index];
				a[index] = a[i];
				a[i] = temp;
			}
		}
	}

 

插入排序

/**
	 * 升序 
	 * 直接插入排序 
	 * 稳定性:稳定 
	 * 时间复杂度:O(n^2)
	 */

	public void InsertSort(int[] a) {
		int insertVal;
		int index;

		for (int i = 1; i < a.length; i++) {

			insertVal = a[i];
			index = i - 1;
			while (index >= 0 && insertVal < a[index]) {
				a[index + 1] = a[index];
				index--;
			}
			a[index + 1] = insertVal;
		}
	}

 

        /**
	 * 快速排序 
	 * 稳定性:不稳定,多个相同的值的相对位置(前后位置)也许会在算法结束时产生变动 
	 * 时间复杂度:O(nlogn)
	 * 空间复杂度:O(nlogn)
	 */	
	public void quicksort(int[] a, int left, int right) {
        int dp;
        if (left < right) {
            dp = partition(a, left, right);
            quicksort(a, left, dp - 1);
            quicksort(a, dp + 1, right);
        }
    }
	
	/**
	 * @return  返回中轴位置
	 */
    public int partition(int[] a, int left, int right) {
        int pivot = a[left];
        while (left < right) {
            while (left < right && a[right] >= pivot)
                right--;
            if (left < right)
                a[left++] = a[right];
            while (left < right && a[left] <= pivot)
                left++;
            if (left < right)
                a[right--] = a[left];
        }
        a[left] = pivot;
        return left;
    }

 

测试程序入口

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SortMain s = new SortMain();
		int size = 40000000;
		// 数组必须马上分配空间,否则编译器报错
		int[] a = new int[size];
		for (int i = 0; i < a.length; i++) {
			// 取0~100随机数
			int r = (int) (Math.random() * 10000);
			a[i] = r;
//			System.out.print(r + "  ");
		}
		System.out.println();
		
		//开始时间
		Calendar car = Calendar.getInstance();
		System.out.println(car.getTime());

		// 冒泡
//		 s.BubbleSort(a);

		// 选择
//		 s.SelectSort(a);

//		// 插入
//		s.InsertSort(a);
		
		//快排
		s.quicksort(a,0, size-1);
		
		//排序结束时间
		car = Calendar.getInstance();
		System.out.println(car.getTime());

		//数组长度较小时打印数组,较大时注释掉避免死机
//		for (int i = 0; i < a.length; i++) {
//			System.out.print(a[i] + "  ");
//		}

	}

 

 

各排序算法小结

 



 

 

  • 大小: 325.5 KB
分享到:
评论

相关推荐

    Java实现常见排序算法总结

    主要是针对常见的排序算法进行分析实现

    几种常见的排序算法的实现与性能分析数据结构课程设计报告.doc

    几种常见的排序算法的实现与性能分析数据结构课程设计报告.doc

    16种排序算法比较与分析

    常见或不常见排序算法的比较! C语言实现. 40M内存10*1024*1024个整数 BoxSort 0.57s CountingSort 0.89s QuickSort 2.52s CombSort 5.03s ShellInsertSort 5.81s MergeSort 6.20s HeapSort 7.66s ...

    十大排序算法

    常见10大算法,从原理,动图解析到代码实现,逐步分析,让你轻松入门算法

    Python八大常见排序算法定义、实现及时间消耗效率分析

    本文实例讲述了Python八大常见排序算法定义、实现及时间消耗效率分析。分享给大家供大家参考,具体如下: 昨晚上开始总结了一下常见的几种排序算法,由于之前我已经写了好几篇排序的算法的相关博文了现在总结一下的...

    基于C语言实现的若干排序算法和分析

    基于C语言实现的若干排序算法和分析: 讨论 了几种常见的内部排序算法及其时间复杂度: 插入排序、 起泡排序、 选择排序、 快速排 序、 希尔排序、 堆排序, 并且对这几种排序算法进行 了分析比较。着重提供 了希尔...

    数据结构中几种常用的排序算法总结

    对各种排序算法的一个总结,分析了几种常用算法的思想和实现过程。

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    本书是国外数据结构与算法分析方面的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本书的编写目标是同时讲授好的程序设计和算法分析技巧,使读者可以开发出具有最高效率的...

    常用排序算法的c++语言实现.md

    所谓的排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地...这里将一些常见的排序算法分享给大家。

    基于java不同排序算法的实现及其性能比较

    用java实现了几种常见的排序算法 并对它们的性能进行了详细的分析和比较

    python 常见的排序算法实现汇总

    要求能够手写时间复杂度位O(nlogn)的排序算法:快速排序、归并排序、堆排序 1.冒泡排序 思想:相邻的两个数字进行比较,大的向下沉,最后一个元素是最大的。列表右边先有序。 时间复杂度$O(n^2)$,原地排序,稳定的...

    基于JavaScript实现的插入排序算法分析

    本文实例讲述了基于JavaScript实现的插入排序算法。分享给大家供大家参考,具体如下: 根据排序过程中使用的存储器不同,可以将排序方法分为两大类:内部排序和外部排序。 内部排序是指待排序记录存放在计算机随机...

    算法分析与设计代码(全)

    本代码主要简单实现了算法分析中常见的一些基本算法: 1.Ackerman 1.fibonacci 1.hanoi 1.阶乘函数 1.整数划分问题 1.排列问题 2.大整数乘法 2.排序 2.特殊棋盘非递归 3.线性时间查找问题 4.最大子段和 6.背包问题...

    python数据结构与算法,python入门、竞赛必备

    数据结构与算法目录为 数据结构与算法(Python) 1. 引入概念 1.1. 第一次尝试 1.2. 算法的提出 1.3. 第二次尝试 ...6.7. 常见排序算法效率比较 6.8. 搜索 7. 树与树算法 7.1. 二叉树 7.2. 二叉树的遍历

    常见的数据结构与算法,Java语言实现.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    南邮 数据结构 实验四 各排序方法时间测试

    使用随机数产生器产生大数据集合,运行上述各种排序算法,使用系统时钟测量各个算法所需的实际时间,并分析程序的运行结果。(常见内排序算法实际排序所需时间测试及比较)

Global site tag (gtag.js) - Google Analytics