A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

各位学长学姐,帮我写几个排序算法吧,对这个不太了解,冒泡排序,和半分查找就不用写了,谢谢啦

11 个回复

倒序浏览
选择排序 快速排序 堆排序 希尔排序 归并排序 桶排序。。还有这些排序的n多变种
回复 使用道具 举报
还有插入排序
回复 使用道具 举报
好像希尔排序比较高效
回复 使用道具 举报
执笔画梦 来自手机 中级黑马 2015-1-9 07:38:11
报纸
很多的。
回复 使用道具 举报
排序有很多种,如果是初学者,建议先不要去学习。
回复 使用道具 举报
http://bbs.itheima.com/forum.php ... &extra=page%3D1
看一看这个 也是黑马的学员整理的
回复 使用道具 举报
Joseph_liuxh 发表于 2015-1-9 16:03
http://bbs.itheima.com/forum.php ... &extra=page%3D1
看一看这个 也是黑马的学员整理的

mark一下
回复 使用道具 举报
寻觅 中级黑马 2015-1-10 00:31:59
9#
推荐你看算法书,吧各种算法练一练,面试不一定会用,考试不一定会考,工作不一定会用,但至少掌握了算法的思想
回复 使用道具 举报
希尔排序是最高效的,买一本数据结构的书看看。
回复 使用道具 举报
本帖最后由 arlenliu 于 2015-1-12 16:23 编辑

  1. //插入排序:
  2. package org.rut.util.algorithm.support;
  3. import org.rut.util.algorithm.SortUtil;
  4. public class InsertSort implements SortUtil.Sort{
  5.     public void sort(int[] data) {
  6.         int temp;
  7.         for(int i=1;i<data.length;i++){
  8.             for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
  9.                 SortUtil.swap(data,j,j-1);
  10.             }
  11.         }        
  12.     }
  13. }

  14. //选择排序:
  15. package org.rut.util.algorithm.support;
  16. import org.rut.util.algorithm.SortUtil;
  17. public class SelectionSort implements SortUtil.Sort {
  18.     public void sort(int[] data) {
  19.         int temp;
  20.         for (int i = 0; i < data.length; i++) {
  21.             int lowIndex = i;
  22.             for (int j = data.length - 1; j > i; j--) {
  23.                 if (data[j] < data[lowIndex]) {
  24.                     lowIndex = j;
  25.                 }
  26.             }
  27.             SortUtil.swap(data,i,lowIndex);
  28.         }
  29.     }
  30. }
  31. //Shell排序:
  32. package org.rut.util.algorithm.support;
  33. import org.rut.util.algorithm.SortUtil;
  34. public class ShellSort implements SortUtil.Sort{
  35.     public void sort(int[] data) {
  36.         for(int i=data.length/2;i>2;i/=2){
  37.             for(int j=0;j<i;j++){
  38.                 insertSort(data,j,i);
  39.             }
  40.         }
  41.         insertSort(data,0,1);
  42.     }
  43.     private void insertSort(int[] data, int start, int inc) {
  44.         int temp;
  45.         for(int i=start+inc;i<data.length;i+=inc){
  46.             for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){
  47.                 SortUtil.swap(data,j,j-inc);
  48.             }
  49.         }
  50.     }
  51. }
  52. //快速排序:
  53. package org.rut.util.algorithm.support;
  54. import org.rut.util.algorithm.SortUtil;
  55. public class QuickSort implements SortUtil.Sort{
  56.     public void sort(int[] data) {
  57.         quickSort(data,0,data.length-1);        
  58.     }
  59.     private void quickSort(int[] data,int i,int j){
  60.         int pivotIndex=(i+j)/2;
  61.         //swap
  62.         SortUtil.swap(data,pivotIndex,j);
  63.         int k=partition(data,i-1,j,data[j]);
  64.         SortUtil.swap(data,k,j);
  65.         if((k-i)>1) quickSort(data,i,k-1);
  66.         if((j-k)>1) quickSort(data,k+1,j);
  67.     }
  68.     private int partition(int[] data, int l, int r,int pivot) {
  69.         do{
  70.            while(data[++l]<pivot);
  71.            while((r!=0)&&data[--r]>pivot);
  72.            SortUtil.swap(data,l,r);
  73.         }
  74.         while(l<r);
  75.         SortUtil.swap(data,l,r);        
  76.         return l;
  77.     }
  78. }
  79. //改进后的快速排序:
  80. package org.rut.util.algorithm.support;
  81. import org.rut.util.algorithm.SortUtil;
  82. public class ImprovedQuickSort implements SortUtil.Sort {
  83.     private static int MAX_STACK_SIZE=4096;
  84.     private static int THRESHOLD=10;
  85.     public void sort(int[] data) {
  86.         int[] stack=new int[MAX_STACK_SIZE];
  87.         int top=-1;
  88.         int pivot;
  89.         int pivotIndex,l,r;
  90.         stack[++top]=0;
  91.         stack[++top]=data.length-1;
  92.         while(top>0){
  93.             int j=stack[top--];
  94.             int i=stack[top--];
  95.             pivotIndex=(i+j)/2;
  96.             pivot=data[pivotIndex];
  97.             SortUtil.swap(data,pivotIndex,j);
  98.             //partition
  99.             l=i-1;
  100.             r=j;
  101.             do{
  102.                 while(data[++l]<pivot);
  103.                 while((r!=0)&&(data[--r]>pivot));
  104.                 SortUtil.swap(data,l,r);
  105.             }
  106.             while(l<r);
  107.             SortUtil.swap(data,l,r);
  108.             SortUtil.swap(data,l,j);
  109.             if((l-i)>THRESHOLD){
  110.                 stack[++top]=i;
  111.                 stack[++top]=l-1;
  112.             }
  113.             if((j-l)>THRESHOLD){
  114.                 stack[++top]=l+1;
  115.                 stack[++top]=j;
  116.             }
  117.         }
  118.         //new InsertSort().sort(data);
  119.         insertSort(data);
  120.     }
  121.     private void insertSort(int[] data) {
  122.         int temp;
  123.         for(int i=1;i<data.length;i++){
  124.             for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
  125.                 SortUtil.swap(data,j,j-1);
  126.             }
  127.         }      
  128.     }
  129. }

  130. //归并排序:
  131. package org.rut.util.algorithm.support;
  132. import org.rut.util.algorithm.SortUtil;
  133. public class MergeSort implements SortUtil.Sort{
  134.     public void sort(int[] data) {
  135.         int[] temp=new int[data.length];
  136.         mergeSort(data,temp,0,data.length-1);
  137.     }
  138.     private void mergeSort(int[] data,int[] temp,int l,int r){
  139.         int mid=(l+r)/2;
  140.         if(l==r) return ;
  141.         mergeSort(data,temp,l,mid);
  142.         mergeSort(data,temp,mid+1,r);
  143.         for(int i=l;i<=r;i++){
  144.             temp[i]=data[i];
  145.         }
  146.         int i1=l;
  147.         int i2=mid+1;
  148.         for(int cur=l;cur<=r;cur++){
  149.             if(i1==mid+1)
  150.                 data[cur]=temp[i2++];
  151.             else if(i2>r)
  152.                 data[cur]=temp[i1++];
  153.             else if(temp[i1]<temp[i2])
  154.                 data[cur]=temp[i1++];
  155.             else
  156.                 data[cur]=temp[i2++];            
  157.         }
  158.     }
  159. }
  160. //改进后的归并排序:
  161. package org.rut.util.algorithm.support;
  162. import org.rut.util.algorithm.SortUtil;
  163. public class ImprovedMergeSort implements SortUtil.Sort {
  164.     private static final int THRESHOLD = 10;
  165.     public void sort(int[] data) {
  166.         int[] temp=new int[data.length];
  167.         mergeSort(data,temp,0,data.length-1);
  168.     }
  169.     private void mergeSort(int[] data, int[] temp, int l, int r) {
  170.         int i, j, k;
  171.         int mid = (l + r) / 2;
  172.         if (l == r)
  173.             return;
  174.         if ((mid - l) >= THRESHOLD)
  175.             mergeSort(data, temp, l, mid);
  176.         else
  177.             insertSort(data, l, mid - l + 1);
  178.         if ((r - mid) > THRESHOLD)
  179.             mergeSort(data, temp, mid + 1, r);
  180.         else
  181.             insertSort(data, mid + 1, r - mid);
  182.         for (i = l; i <= mid; i++) {
  183.             temp[i] = data[i];
  184.         }
  185.         for (j = 1; j <= r - mid; j++) {
  186.             temp[r - j + 1] = data[j + mid];
  187.         }
  188.         int a = temp[l];
  189.         int b = temp[r];
  190.         for (i = l, j = r, k = l; k <= r; k++) {
  191.             if (a < b) {
  192.                 data[k] = temp[i++];
  193.                 a = temp[i];
  194.             } else {
  195.                 data[k] = temp[j--];
  196.                 b = temp[j];
  197.             }
  198.         }
  199.     }
  200.     private void insertSort(int[] data, int start, int len) {
  201.         for(int i=start+1;i<start+len;i++){
  202.             for(int j=i;(j>start) && data[j]<data[j-1];j--){
  203.                 SortUtil.swap(data,j,j-1);
  204.             }
  205.         }
  206.     }
  207. }
  208. //堆排序:
  209. package org.rut.util.algorithm.support;
  210. import org.rut.util.algorithm.SortUtil;
  211. public class HeapSort implements SortUtil.Sort{
  212.     public void sort(int[] data) {
  213.         MaxHeap h=new MaxHeap();
  214.         h.init(data);
  215.         for(int i=0;i<data.length;i++)
  216.             h.remove();
  217.         System.arraycopy(h.queue,1,data,0,data.length);
  218.     }
  219.      private static class MaxHeap{
  220.         void init(int[] data){
  221.             this.queue=new int[data.length+1];
  222.             for(int i=0;i<data.length;i++){
  223.                 queue[++size]=data[i];
  224.                 fixUp(size);
  225.             }
  226.         }
  227.         private int size=0;
  228.         private int[] queue;
  229.         public int get() {
  230.             return queue[1];
  231.         }
  232.         public void remove() {
  233.             SortUtil.swap(queue,1,size--);
  234.             fixDown(1);
  235.         }
  236.         //fixdown
  237.         private void fixDown(int k) {
  238.             int j;
  239.             while ((j = k << 1) <= size) {
  240.                 if (j < size && queue[j]<queue[j+1])
  241.                     j++;
  242.                 if (queue[k]>queue[j]) //不用交换
  243.                     break;
  244.                 SortUtil.swap(queue,j,k);
  245.                 k = j;
  246.             }
  247.         }
  248.         private void fixUp(int k) {
  249.             while (k > 1) {
  250.                 int j = k >> 1;
  251.                 if (queue[j]>queue[k])
  252.                     break;
  253.                 SortUtil.swap(queue,j,k);
  254.                 k = j;
  255.             }
  256.         }
  257.     }
  258. }
  259. //SortUtil:
  260. package org.rut.util.algorithm;
  261. import org.rut.util.algorithm.support.BubbleSort;
  262. import org.rut.util.algorithm.support.HeapSort;
  263. import org.rut.util.algorithm.support.ImprovedMergeSort;
  264. import org.rut.util.algorithm.support.ImprovedQuickSort;
  265. import org.rut.util.algorithm.support.InsertSort;
  266. import org.rut.util.algorithm.support.MergeSort;
  267. import org.rut.util.algorithm.support.QuickSort;
  268. import org.rut.util.algorithm.support.SelectionSort;
  269. import org.rut.util.algorithm.support.ShellSort;
  270. public class SortUtil {
  271.     public final static int INSERT = 1;
  272.     public final static int BUBBLE = 2;
  273.     public final static int SELECTION = 3;
  274.     public final static int SHELL = 4;
  275.     public final static int QUICK = 5;
  276.     public final static int IMPROVED_QUICK = 6;
  277.     public final static int MERGE = 7;
  278.     public final static int IMPROVED_MERGE = 8;
  279.     public final static int HEAP = 9;
  280.     public static void sort(int[] data) {
  281.         sort(data, IMPROVED_QUICK);
  282.     }
  283.     private static String[] name={
  284.             "insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"
  285.     };
  286.     private static Sort[] impl=new Sort[]{
  287.             new InsertSort(),
  288.             new BubbleSort(),
  289.             new SelectionSort(),
  290.             new ShellSort(),
  291.             new QuickSort(),
  292.             new ImprovedQuickSort(),
  293.             new MergeSort(),
  294.             new ImprovedMergeSort(),
  295.             new HeapSort()
  296.     };
  297.     public static String toString(int algorithm){
  298.         return name[algorithm-1];
  299.     }
  300.     public static void sort(int[] data, int algorithm) {
  301.         impl[algorithm-1].sort(data);
  302.     }
  303.     public static interface Sort {
  304.         public void sort(int[] data);
  305.     }
  306.     public static void swap(int[] data, int i, int j) {
  307.         int temp = data[i];
  308.         data[i] = data[j];
  309.         data[j] = temp;
  310.     }
  311. }
复制代码

回复 使用道具 举报
这些算法网上很多的,诸如CSDN。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马