`

常见排序算法总结

阅读更多

冒泡排序:

冒泡排序介绍:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换的元素,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,就像冒泡一样,因此称之为冒泡排序。

冒泡排序算法原理:
1、比较相邻的两个元素。如果第一个元素比第二个元素大,就交换他们两个元素。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。按照这个策略执行一趟后,最后的元素会是最大的数。
3、将最后一个元素排除在外,针对其余的所有元素重复以上两步的操作步骤。
4、持续对越来越少的元素重复上面的操作步骤,直到没有任何一对元素需要比较。

冒泡排序最好的时间复杂度为O(N),最坏的时间复杂度为O(N²),因此冒泡排序总的平均时间复杂度为O(N²)。

/**
 * 冒泡排序算法实现
 * @param destArray 待排序的无序数组  如:65 27 59 64 58 
 */
public static void bubbleSort(int[] destArray)
{
	for(int i = 0;i < destArray.length;i++)
	{
	   for(int j = i;j < destArray.length;j++)
	   {
	      if(destArray[j] < destArray[i])
	      {
		     int temp = destArray[i];
		     destArray[i] = destArray[j];
		     destArray[j] = temp;
	      }
	   }
	}
}

快速排序:
快速排序介绍:
快速排序(Quick Sort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序算法原理:
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1、设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2、以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3、从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4、从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5、重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i,j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

快速排序最好的时间复杂度为O(NlogN),最坏的时间复杂度为O(N²),因此快速排序总的平均时间复杂度为O(NlogN)。

/**
 * 快速排序算法实现
 * @param destArray 待排序的无序数组  如:65 27 59 64 58
 * @param low 数组的低index
 * @param high 数组的高index
 */
public static void quickSort(int[] destArray, int low, int high)
{
	if(low >= high)
	{
		return;
	}
	
	int first = low;
	int last = high;
	int key = destArray[first];
	
	while(first < last)
	{
		while(first < last && destArray[last] >= key)
		{
			last--;
		}
		destArray[first] = destArray[last];//将比第一个小的移到低端
		
		while(first < last && destArray[first] <= key)
		{
			first++;
		}
		destArray[last] = destArray[first];
	}
	
	destArray[first] = key;
	quickSort(destArray, low, first - 1);
	quickSort(destArray, first + 1, high);
}

插入排序:
插入排序介绍:
插入排序(Insert Sort)它的基本思想是:输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。
插入排序算法原理:
输入一个数,插入一个各元素已经按照升序排列的数组中,插入后使数组中元素仍然是按照升序排列的。思想:把欲插入的数与数组中各数逐个比较,当找到第一个比插入数大的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素a[i]即可。如果被插入数比所有的元素值都小则插入最前位置。
插入排序最好的时间复杂度为O(N),最坏的时间复杂度为O(N²),因此冒泡排序总的平均时间复杂度为O(N²)。

/**
 * 插入排序算法实现(由前向后)
 * @param destArray 待排序的无序数组  如:65 27 59 64 58 
 */
public static void insertSort(int[] destArray)
{
	//从第2个数据开始插入,因此这里从i=1开始
	for(int i = 1;i < destArray.length;i++)
	{
		int j = 0;
		//寻找要插入的位置
		while(j < i && destArray[j] <= destArray[i])
			j++;
		
		//i位置之前,有比destArray[i]大的数,则进行挪动和插入
		if(j < i)
		{
			int k = i;
			int temp = destArray[i];
			
			//挪动位置
			while(k > j)
			{
				destArray[k] = destArray[k-1];
				k--;
			}
			destArray[k] = temp;//插入
		}
	}
}

 

分享到:
评论

相关推荐

    八种常见排序算法总结(转)

    "八种常见排序算法总结" 直接插入排序是一种简单的排序算法,它的思想是每次选择一个元素 K 插入到之前已排好序的部分 A[1…i]中,插入过程中 K 依次由后向前与 A[1…i]中的元素进行比较。若发现 A[x]&gt;=K,则将 K ...

    Java实现常见排序算法总结

    【Java实现常见排序算法总结】 排序算法是计算机科学中至关重要的一部分,它涉及到数据处理和算法设计。本文将探讨两种常见的排序算法在Java中的实现:直接插入排序和希尔排序。 1. **直接插入排序(直接插入排序...

    常见排序算法总结.pdf

    【排序算法总结】 排序算法是计算机科学中处理数据排列的重要工具,主要分为稳定排序和非稳定排序、内排序和外排序两大类。稳定排序保证了相同元素在排序后的相对位置不变,而非稳定排序则不作此保证。内排序是指...

    常见排序算法总结.docx

    以上就是对常见排序算法的总结,包括稳定性和非稳定性、内排序与外排序的概念,以及插入排序和选择排序的详细讲解。这些基础排序算法在实际编程中非常常见,理解它们的工作原理有助于优化算法性能并解决实际问题。

    常见排序算法汇总

    总结来说,这些排序算法各有优劣,适用于不同的场景。冒泡排序和选择排序简单但效率低,适合小规模数据;插入排序和堆排序在中等规模数据上表现良好;归并排序和快速排序在大规模数据上表现出色,归并排序稳定而快速...

    排序算法总结.doc

    以下是对几种常见排序算法的详细说明: 1. 插入排序: 插入排序是一种简单的排序算法,其时间复杂度为O(n^2)。它通过将每个元素插入到已排序的部分中找到正确位置来工作,保持已排序部分的稳定性。当数组近乎有序...

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其关键字序列分别为K1, K2, ..., Kn,如果存在一个排列p1, p2, p3, ..., pn,使得关键字满足非...

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

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

    各种排序算法总结(ppt)

    在这个名为“各种排序算法总结(ppt)”的资料中,我们将会深入探讨多种常见的排序算法,包括它们的基本原理、优缺点以及实际应用。** 首先,我们要了解排序的目的是为了使数据有序,这在数据处理和分析中具有广泛...

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

    ### 数据结构中几种常用的排序算法总结 #### 一、引言 在计算机科学与数学领域,排序算法是一种能够按照特定顺序(如数值顺序或字典顺序)排列一系列数据的算法。排序算法对于许多其他算法(如搜索算法和合并算法)...

    8个常见数据结构排序算法总结

    文档格式是chm文档,方便查看,点击即可快速浏览排序算法,里面的程序可以直接拿来用,实现语言是标准的C程序。

    排序算法总结和比较

    本文主要总结和比较了九种常见的排序算法:快速排序、归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序以及基数排序。 1. **快速排序**:快速排序是一种基于分治思想的高效排序算法,由C.A.R....

    经典排序算法总结

    在计算机科学领域,排序算法是数据结构中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定顺序排列。以下是对几种经典排序算法的详细解释和C++实现: 1. **冒泡排序**: 冒泡排序是最基础的...

    几种排序算法总结及比较

    这里我们将深入探讨几种常见的排序算法,并在VS2013环境下进行实现和比较。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的交换排序,它通过重复遍历待排序的数列,依次比较相邻元素并根据需要交换位置,直到...

    排序算法总结(常见算法总结分析)

    【排序算法总结】 排序算法是计算机科学中一个基础且重要的概念,它用于组织和整理数据,使其按照特定的标准(如升序或降序)排列。本文将深入探讨三种常见的排序算法:选择排序、直接插入排序和冒泡排序。 1. **...

    排序算法总结文档

    排序算法是计算机科学中最基础且重要的算法之一,用于将一组数据按照特定顺序排列。这里我们主要探讨五种经典的排序算法:选择排序、冒泡排序、插入排序、快速排序以及归并排序。 1. **选择排序**: 选择排序的...

    最经典的8大排序算法总结

    常见的排序算法有很多种,它们在时间复杂度、空间复杂度、稳定性和适用场景上各有优劣。在本篇总结中,将探讨8种经典的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、二叉树排序和...

    java实现常见排序算法

    在编程领域,排序算法是计算机科学中的核心概念,特别是在数据结构和算法分析中。Java作为广泛应用的编程语言,提供了一种高效的方式来实现各种排序算法。本文将深入探讨Java中实现的两种主要排序类型:插入排序和...

Global site tag (gtag.js) - Google Analytics