简单总结下各种排序算法

编程技术  /  houtizong 发布于 3年前   73
public static void bubbleSort(int[] c){for(int i=0,len=c.length;i<len;i++){for(int j=0;j<len-i-1;j++){if(c[j]>c[j+1]){Helper.swap(c, j+1, j);}}}}public static void selectionSort(int[] c){for(int i=0,len=c.length;i<len;i++){int k=i;for(int j=i+1;j<len;j++){if(c[j]<c[k])k=j;}if(k!=i){Helper.swap(c, i, k);}}}public static void insertionSort(int[] a){for(int i=1,len=a.length;i<len;i++){int j=i;while(j>0){if(a[j]<a[j-1]){Helper.swap(a,j,j-1);}j--;}}}public static void quickSort2(int[] c,int begin,int end){//update 2012/7/1if(c==null||c.length<2){return;} if(begin>end)return;  int len = c.length; if(begin<end&&(0<=begin&&begin<len)&&(0<=end&&end<len)){ int point=c[begin];       int i=begin,j=end;       int index=i;       while(i<j){      while(c[j]>=point&&i<j)j--;           if(i<j){               c[index]=c[j];               index=j;           }          while(c[i]<=point&&i<j)i++;           if(i<j){               c[index]=c[i];               index=i;           }       }       c[index]=point;       quickSort2(c,begin,i-1);       quickSort2(c,i+1,end);  }}public static void quickSort(int[] c,int begin,int end){if(begin>end)return;int low=begin;int high=end;boolean flag=true;while(low!=high){if(c[low]>c[high]){Helper.swap(c, low, high);flag=!flag;}if(flag){high--;}else{low++;}}quickSort(c,begin,low-1);quickSort(c,high+1,end);}            /**     * 用最大堆实现“就地”升序排序     * 思路:     * 1.“自下而上”,将整个数组初始化建成一个最大堆     *   从最右下方的子堆——也就是以最后一个非叶子结点为根结点(lastRootindex)的子堆——开始,     *   调整各个子堆使之为最大堆,最后使得整个数组成为一个最大堆     *   注意到从 0, 1, 2, ...lastRootIndex 的结点都是非叶子结点,都作为子堆需要调整     * 2.将当前堆顶元素(最大元素)与堆的最后一个元素交换,这样,当前最大值就排到末尾了     * 3.将堆的大小减1(排除最后一个元素),重新调整使得堆仍为最大堆,直到排序完毕     *   注意这时候的调整是“自上而下”,选举出当前的最大值放至堆顶     */    public static void heapsort(int[] array) {        int lastIndex = array.length - 1;        int lastRootIndex = (lastIndex - 1) / 2;        for (int root = lastRootIndex; root >= 0; root--) {            reheap(array, root, lastIndex);        }        for (int last = lastIndex; last >= 0; last--) {            swap(array, 0, last);            reheap(array, 0, last - 1);     //堆大小减1        }        System.out.println(Arrays.toString(array));    }    /**     * 调整使之仍为最大堆     * @param heap heap是这样一个“半堆”:执行调整操作前是一个最大堆。将最大堆的堆顶元素移除,并替换为最大堆的最后一个元素,成为“半堆”     * @param rootIndex “半堆”的根     * @param lastIndex “半堆”的最后一个元素     */    public static void reheap2(int[] heap, int rootIndex, int lastIndex) {        int orphan = heap[rootIndex];        int leftIndex = rootIndex * 2 + 1;        boolean done = false;        while (!done && leftIndex <= lastIndex) {            int largeIndex = leftIndex;            int rightIndex = leftIndex + 1;            if (rightIndex <= lastIndex && heap[rightIndex] > heap[leftIndex]) {                largeIndex = rightIndex;            }            if (heap[largeIndex] > orphan) {                heap[rootIndex] = heap[largeIndex];                rootIndex = largeIndex;                leftIndex = rootIndex * 2 + 1;            } else {                done = true;            }        }        heap[rootIndex] = orphan;    }public static void mergeSort(int[] c,int low,int high,int[] tmp){if(low>=high)return;int mid=(high&low)+((high^low)>>1);mergeSort(c,low,mid,tmp);mergeSort(c,mid+1,high,tmp);merge(c,low,mid,high,tmp);}public static void merge(int[] c,int low,int mid,int high,int[] tmp){int begin01=low;int end01=mid;int begin02=mid+1;int end02=high;int k=0;while(begin01<=end01&&begin02<=end02){if(c[begin01]<c[begin02]){tmp[k]=c[begin01];k++;begin01++;}else{tmp[k]=c[begin02];k++;begin02++;}}while(begin01<=end01){tmp[k++]=c[begin01++];}while(begin02<=end02){tmp[k++]=c[begin02++];}System.arraycopy(tmp, 0,  c,low, k);}

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客