比较常见的算法:冒泡排序、选择排序、插入排序、快速排序。具体实现如下:
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(); } }
相关推荐
快速排序算法复习.md
排序算法复习大全(Java实现)
主要有直接插入排序,选择排序,冒泡排序,二分排序,shell排序等等
这本书是用java讲数据结构和排序算法的,全书只有44页,但是讲的内容很不错,推荐学习或者复习数据结构的童鞋下在看看!
算法-数据结构之【排序】复习题.rar
数据结构复习.zip 各种排序算法、大二上算法合集
Java基础复习笔记11基本排序算法。~~~~~~
复习数据结构,随手写了几个排序算法。由于时间仓促,还有归并排序,基数排序和堆排序没有完成。希望谅解。我会尽快补上!
2018浙江高中信息技术排序和查找算法复习资料总结.doc
课程内容如下: 八大排序的详细讲解,求解递归式的复杂度,常用的几种算法和典例,贪心有活动选择,部分背包,迪杰斯特拉等,动规的有装配线调度,最大子段和,0-1背包,最长公共子序列(LCS),最长回文子序列的...
去笔试被鄙视了,回来复习数据结构,把排序算法用JAVA写了一遍,不要资源分攒RP,下次笔试一定要过啊^_^
2.快速排序算法是基于 的一种排序算法。 3.适用于贪心算法求解的问题一般具有两个特性: 和 ,其中 是运用该算法解决问题的核心。 4.贪心算法和动态规划算法的主要区别在于 。 5.分析0/1背包问题时,可使用贪心法、...
本资源适合C语言复习和考试的学习者和考生使用,帮助他们巩固和深化对C语言冒泡排序算法的理解和掌握,提升解题能力和自信心。 介绍了C语言冒泡排序算法的原理、步骤、实现方法和优化技巧,以及相关的概念和知识,...
浙教算法与程序设计VB排序复习PPT课件.pptx
快速排序的应用
增长次数、渐进符号和基本效率类型、分析算法的执行次数,包括递归与非递归算法的分析方法,反向替换法等。 第3章 选择排序、字符串匹配、穷举查找:包括背包问题和分配问题; 最近对和凸包问题的蛮力算法、深度优先...
山东大学2018算法导论图论考试复习总结,只考图论部分所以只有图论部分的总结。 本人于考试周吐血总结,包含的内容如下。 算法导论-图论 复习 优质的复习资料 1 基本的图算法 1.1 图的表示 1.2 BFS:广度优先搜索 ...
复习用整理代码。包括直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序。
排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界...