`

排序算法复习

    博客分类:
  • JAVA
 
阅读更多

比较常见的算法:冒泡排序、选择排序、插入排序、快速排序。具体实现如下:

public class SortUtil {

	public static void main(String[] args) {
		int[] a={32,12,3,45,31,30,5,1,40};
		//InsertSort(a);
		//BubbleSort(a);
		//SelectSort(a);
		QuickSort(a, 0, a.length-1);
		printData(a);
	}
	
	/**
	 * 快速排序
	 * @param a
	 * @param low
	 * @param high
	 */
	public static void QuickSort(int[] a,int low,int high){
		if(low < high){
			int middle = GetMiddle(a, low, high);
			QuickSort(a, 0, middle-1);
			QuickSort(a, middle+1, high);
		}
	}
	
	/**
	 * 获取分隔下标
	 * @param a
	 * @param low
	 * @param high
	 */
	public static int GetMiddle(int[] a,int low,int high){
		if(low < high){
			int temp = a[low];
			while(low<high){
				while(low < high && temp < a[high]){
					high--;
				}
				a[low]=a[high];
				while(low<high && temp > a[low]){
					low++;
				}
				a[high]=a[low];
			}
			a[low]=temp;
		}
		return low;
	}
	
	/**
	 * 选择排序
	 * 原理:一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最开始的位置。
	 * 1)在未排序数组中找到最小元素,存放到排序序列的起始位置;
	 * 2)再从剩余的未排序的数组中继续寻找最小的元素,然后放到排序数组的末尾;
	 * 3)以此类推,直到数组所有元素排序完毕。
	 * @param a
	 */
	public static void SelectSort(int[] a){
		for(int i=0;i<a.length-1;i++){
			int min=a[i];
			int index = i;
			for(int j=i+1;j<a.length;j++){
				if(min > a[j]){
					min=a[j];
					index=j;
				}
			}
			int temp = a[index];
			a[index]=a[i];
			a[i]=temp;
		}
	}
	
	/**
	 * 冒泡排序
	 * 比较相邻的两个元素,如果第一个比第二个大,则交换两个元素的位置
	 * 对每一对相邻的元素做如上的操作,比较结束后,最大的元素会被移动到最后。
	 * 再次遍历时,最后一个元素不用参与比较了,此时数组的长度减1,
	 * 针对剩余的元素重复上述步骤,直到剩余数组的长度为0;
	 * @param a
	 */
	public static void BubbleSort(int[] a){
		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]){
					int temp = a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
		}
	}
	
	/**
	 * 插入排序
	 * 原理:通过构建有序数据,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
	 * 1)默认该数组已经是有序的;
	 * 2)从下标1开始,取出下标1的值,在已排序的数组中,从当前下标开始,从后向前扫描;
	 * 3)如果该元素小于新元素,将新元素向后移动一个位置;
	 * 4)重复步骤3,直到找到该元素大于新元素或已扫描到开始端;
	 * 5)将该元素插入到新位置中;
	 * 6)下标加1,重复步骤2;
	 * @param a
	 */
	public static void InsertSort(int[] a){
		for(int i=1;i<a.length;i++){
			int j=i;
			int min=a[i];
			while(j>0 && min < a[j-1]){
				a[j]=a[j-1];
				j--;
			}
			a[j]=min;
		}
	}
	
	/**
	 * 打印数组
	 * @param a
	 */
	private static void printData(int[] a){
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
		System.out.println();
	}
}

 

分享到:
评论

相关推荐

    排序算法复习大全(Java实现).doc

    排序算法复习大全(Java 实现) 本文档旨在详细介绍排序算法的各种实现方式,包括插入排序、冒泡排序、选择排序、Shell 排序和快速排序等,所有算法都使用 Java 语言实现。本文档首先引入了一个基础类 Sorter,用于...

    快速排序算法复习.md

    快速排序算法复习.md

    常见排序算法复习及代码

    主要有直接插入排序,选择排序,冒泡排序,二分排序,shell排序等等

    算法复习算法复习资料

    综上所述,算法复习资料涵盖了IT领域的诸多重要概念,包括但不限于数据结构、排序算法、搜索算法、图论、动态规划以及问题求解策略。通过深入学习和实践,你可以提升自己的编程能力,更好地应对复杂的编程挑战。

    算法复习要点整理

    分治法在许多重要算法中扮演了关键角色,如折半查找、合并排序、快速排序等,这些算法不仅展示了分治法的威力,也证明了其在解决大规模问题时的高效性。 #### 减治法:逐步逼近最优解 减治法是一种迭代减少问题...

    算法-数据结构之【排序】复习题.rar

    本复习题主要涵盖了排序算法的基础知识和常见类型,旨在帮助学习者巩固和深化对排序算法的理解。** 在数据结构中,排序算法通常分为内部排序(数据量较小,可在内存中完成)和外部排序(数据量巨大,需要借助磁盘等...

    数据结构复习.zip 各种排序算法、大二上算法合集

    在这个“数据结构复习.zip”压缩包中,你可能会找到一系列关于排序算法和其他基础算法的资料,这对于复习和深入理解这些概念非常有帮助。 首先,让我们详细讨论一下数据结构。数据结构是组织和存储数据的方式,它...

    排序算法动态演示

    在计算机科学领域,排序算法是数据结构中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定顺序存储。...对于编程初学者或想要复习排序算法的开发者来说,这是一个非常实用的工具。

    蓝桥杯算法复习资料,蓝桥杯算法复习资料

    2. 排序与搜索算法:包括各种排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序等,以及二分搜索等搜索算法。 3. 动态规划:作为一种算法设计技巧,动态规划在解决具有重叠子问题和最优子结构特征的问题...

    Java基础复习笔记11基本排序算法

    ### Java基础复习笔记11基本排序算法 #### 内容概览 本文档主要介绍了Java中的几种基本排序算法,包括冒泡排序、快速排序、选择排序、堆排序等,并通过具体的代码实例对每种排序算法进行了详细的解释。文档旨在...

    算法分析期末复习

    - **定义**:快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列。 - **核心思想**:选择一个基准值,将序列分为比基准值小和比基准值大的两个部分,然后递归地对这两部分进行...

    数据结构与算法复习提纲(详细版)

    这一章节不仅讲解了折半搜索的原理,还可能涉及更广泛的排序算法,如快速排序、归并排序等,这些算法是数据处理和数据库管理中的关键技术。 ### 七、STL中的向量与表 STL(标准模板库)提供了一系列高性能的数据...

    (希尔排序算法).doc计算机系算法分析

    希尔排序是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数组元素按照一定的间隔分组,然后对每组进行插入排序,随着间隔逐渐减小,直到间隔为1时,整个数组成为一个组,...

    浙教算法与程序设计VB排序复习PPT课件.pptx

    **算法与程序设计VB排序复习概述** 排序是计算机科学中基础且重要的问题,尤其是在数据...总结,这份PPT课件提供了关于冒泡排序和选择排序的全面复习,涵盖了理论、实践和优化,是学习和巩固VB排序算法的良好资源。

    数据机构各种排序算法

    复习数据结构,随手写了几个排序算法。由于时间仓促,还有归并排序,基数排序和堆排序没有完成。希望谅解。我会尽快补上!

    NOIP初赛复习13排序与算法复杂度.pdf

    总结来说,对于NOIP初赛复习阶段,理解并掌握这些排序算法的基本原理及其实现方式非常重要。此外,对于不同规模的数据集,合理选择合适的排序算法也是非常关键的。对于大数据集,应优先考虑使用快速排序等高效算法。

    MoreWindows白话经典算法之七大排序第2版(高清)

    本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...

    算法设计复习简答题资料

    2)递归求解:通过递归调用快速排序算法,分别对 a[p:q-1]和 a[q+1:r]进行排序。3)合并:由于对 a[p:q-1]和 a[q+1:r]的排序是就地进行的,所以在 a[p:q-1]和 a[q+1:r]都已排好的序后不需要执行任何计算,a[p:r]就已...

    Python_一本关于排序算法的 GitBook 在线书籍 十大经典排序算法多语言实现.zip

    在当今的数据处理和分析领域,排序算法无疑是一项基础且核心的技术。排序算法的性能直接影响到数据处理的效率,因此掌握不同类型的排序算法具有重要的意义。尤其是对于Python这样的编程语言,它不仅简洁易学,而且在...

Global site tag (gtag.js) - Google Analytics