排序算法
高进123
每天进步一点点
展开
-
我对几种常见排序算法的理解
一、冒泡排序 核心代码如下:以升序为例private static void bubble(int[] a) { for(int i=0;i<a.length-1;i++){//变量i控制冒泡的轮数,冒出的值从最大的到倒数第二大,共n-1轮) boolean flag = true;//优化 for(int j=0;j<a.leng原创 2016-03-03 18:13:56 · 541 阅读 · 0 评论 -
快速排序代码及实现(优化)
传统的快速排序是目前性能最快的排序方法,其在平均情况下的时间复杂度为O(nlogn,)但快速排序性能不稳定,在已经排好序或接近排好序的情况下时间复杂度为O(n*n),分析其原因在于其总是选取序列的第一个元素作为枢轴,而其右侧总是比枢轴大的数,所以一轮下来只能排一个数,所以采用随机数算法讲序列任意一个数与第一个数交换,再把第一个数作为枢轴进行排序。 具体代码如下(以整型数组排序为例):public原创 2016-03-08 13:49:48 · 424 阅读 · 0 评论 -
我对希尔排序的理解
希尔排序,即组内分组排序,它是建立在其他排序方法上的一种排序方法,它通过逐渐减小分组间隔,使得序列越来越有序。具体代码如下(以整型数组排为例):public static void shellSort(int a[]){ for(int gap = (a.length+1)/2;gap>0;){ for(int i = 0;i<a.length-gap;i++)//总排序趟数原创 2016-03-08 14:18:32 · 458 阅读 · 0 评论 -
我对归并排序的理解
归并排序总体来说比较简单,其适应场所是对已经排序好的几个序列整合成一个总的排序好的序列。根据其特点,对于已经排序好的几个序列,只需依次取其第一个元素比较,较小的放在新序列里。对于一个数组的情况,先将其拆分,再二路归并排序。 具体代码实现如下(以整型数组排序为例):pubic static viod mergeSort(int a[],int left,int right){ if(left原创 2016-03-08 14:47:22 · 1729 阅读 · 0 评论