
排序
冯居竹
驽马十驾,功在不舍。
展开
-
排序(桶排序)
所谓桶排序也称基数排序,按位上数字的大小(例如个位数来分桶),桶内进行排序int[] a = {23,5,32,4,23,256,867,45,3,54,54,766};public void radixSort(){ int max = 0; //找到最大的数 for(int i=0;i<a.length;i++){ if(max<a[i]){ max=a[i]; } } //根据最大的数判断位数 int times = 0; while(max &g..原创 2020-06-11 11:31:37 · 195 阅读 · 0 评论 -
(排序)归并排序
@Testpublic void TestMerge(){ mergeSort(a,low,a.length-1);}public void mergeSort(int[] a,int low,int high){ int mid=(low + high) /2; if(low < high){ //left mergeSort(a,low,mid); //right mergeSort(a,mid+1,high); //左右归并 merge(a,low...原创 2020-06-10 22:28:20 · 189 阅读 · 0 评论 -
交换排序(快速排序)
基本思想选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其拍好序后的正确位置,然后再用同样的方法递归地排序划分地两部分int a[] ={2,45,435,4,4,2,321,25,34,57};@Testpublic void quickSort(){ int[] tem = quickSort(a,0,a.length-1); System.out.println(Arrays.toS.原创 2020-06-08 12:24:34 · 235 阅读 · 0 评论 -
交换排序(冒泡排序)
冒泡排序基本思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,在较大的数往下沉,较小的往上冒。int a[] ={3,23,5,52,2,42,673,32,32,13};public void swap(int data,int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp;}public coid bubSort(){ for(int i=0;i<a.length;i+.原创 2020-06-07 10:11:58 · 249 阅读 · 0 评论 -
选择排序(堆排序)
堆排序是一种树形选择排序,是对直接选择排序的有效改进具有n个元素的序列(k1,k2,…kn),当且仅当 满足下面条件时称之为堆在这里讨论满足后者条件的大顶堆,我们所说的堆是一颗完全二叉树,树中的每个结点的值都不小(或不大于)其左右孩子结点的值。而大顶堆就是父节点的值大于或等于孩子结点的值。如何将n个待排序的数建成堆输出堆顶元素后,怎样调整剩余n-1个元素,使其成为一个新堆对n个元素初始建堆的方法对初始序列建堆的 过程,就是一个反复进行筛选的过程。n个结点的完全二叉树,则最后一个..原创 2020-06-06 10:07:27 · 1265 阅读 · 0 评论 -
选择排序(简单选择排序与二元选择排序)
简单选择排序要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。int[] a= {5,876,,4,,,2,4,65,7,8,6,,55,3,4}int min;for(int i=0;i<a.length;i++){ min = i; for(int j=i+1;j<a.length;j++){ if(a[j]<a[min]){ //找到最小值下标 min .原创 2020-06-05 10:18:47 · 450 阅读 · 2 评论 -
排序(希尔排序)
希尔排序基本思想希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;int a[]={2,5,原创 2020-06-04 12:03:09 · 230 阅读 · 0 评论 -
排序(二分插入排序)
二分插入排序属于插入排序的一种,是一种稳定的排序.(相等的元素顺序没有改变)最坏情况:每次都在有序序列的起始位置插入,则整个有序序列的元素需要后移,时间复杂度为O(n2)最好情况:待排序数组本身就是正序的,每个元素所在位置即为它的插入位置,此时时间复杂度仅为比较时的时间复杂度,为O(log2n)平均情况:O(n2)空间复杂度上,二分插入也是就地排序,空间复杂度为(O(1))。int a[]={2,45,34,324,2,3,7,555,46,34};public void testT...原创 2020-06-03 09:39:06 · 5574 阅读 · 0 评论 -
排序(直接插入排序)
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存,我们所学习的八大排序就是内部排序我们从插入排序开始思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置,直到全部插入排序完为止。关键:在前面已经排好序的序列中找到合适的插入位置。方法:直接插入排序二分插入排序希尔排序直接插入排序:思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位.原创 2020-06-02 22:55:38 · 151 阅读 · 0 评论