java 排序算法四例
lgl669
2009-07-20
1
2class zyfsort { 3 public static void main (String[] args) { 4 int gohome[] = new int[]{12,7,54,21,1,4,65,76,34,9,3,6}; 5 System.out.println("插入排序算法"); 6// InsertionSort(gohome); 7 System.out.println("-------------------------------------------"); 8 System.out.println("选择排序算法"); 9// SelectSort(gohome); 10 System.out.println("-------------------------------------------"); 11 System.out.println("冒泡排序算法"); 12// BubbleSort(gohome); 13 System.out.println("-------------------------------------------"); 14 gohome =QuickSort(gohome); 15 16 for (int t=0; t<gohome.length;t++) 17 { 18 System.out.print(gohome[t]+"--"); 19 } 20 } 21 22 //插入排序算法 23 public static void InsertionSort(int[] goal) 24 { 25 for (int i = 1; i<goal.length; i++) 26 { int now = i; 27 int frank = goal[i]; 28 while (now>0 && goal[now-1] <= frank) 29 { 30 goal[now]=goal[now-1]; 31 now--; 32 } 33 goal[now]=frank; 34 35 36 } 37 38 39 for (int t=0; t<goal.length;t++) 40 { 41 System.out.print(goal[t]+"--"); 42 } 43 } 44 45 //选择排序算法 46 public static void SelectSort(int[] goal) 47 { 48 int max; 49 int stmp; 50 for (int i = 0; i<goal.length-1; i++) 51 { 52 max=i; 53 for (int j = i+1; j<goal.length; j++) 54 if(goal[j]>goal[max]) 55 max=j; 56 57 stmp = goal[i]; 58 goal[i]=goal[max]; 59 goal[max]=stmp; 60 61 } 62 for (int t=0; t<goal.length;t++) 63 { 64 System.out.print(goal[t]+"--"); 65 } 66 67 68 } 69 70 //冒泡排序算法 71 public static void BubbleSort(int[] goal) 72 { int stmp; 73 for (int i = 1; i< goal.length; i++) 74 { 75 for(int j=0; j<i;j++) 76 { 77 if(goal[i]>goal[j]) 78 { 79 stmp=goal[i]; 80 goal[i]=goal[j]; 81 goal[j]=stmp; 82 } 83 } 84 85 } 86 for (int t=0; t<goal.length;t++) 87 { 88 System.out.print(goal[t]+"--"); 89 } 90 } 91 92 //快速排序算法 93 public static int[] QuickSort(int[] number) { 94 QuickSort(number, 0, number.length-1); 95 return number ; 96 } 97 private static void QuickSort(int[] number,int left, int right) { 98 int stmp; 99 if(left < right) { 100 System.out.println(left+" | "+right+" | "+(left+right)/2); 101 int s = number[(left+right)/2]; 102 int i = left - 1; 103 int j = right + 1; 104 while(true) { 105 // 向右找 106 while(number[++i] > s) ; 107 // 向左找 108 while(number[--j] < s) ; 109 if(i >= j) 110 break; 111 stmp = number[i]; 112 number[i] = number[j]; 113 number[j] = stmp; 114 } 115 QuickSort(number, left, i-1); // 对左边进行递回 116 QuickSort(number, j+1, right); // 对右边进行递回 117 } 118 } 119 } |
|
jiaofei3385140
2009-11-02
看不明白,能不能再写篇文章是关于每个步骤的详细解释,谢谢了
|
|
lgl669
2009-11-02
jiaofei3385140 写道 看不明白,能不能再写篇文章是关于每个步骤的详细解释,谢谢了
这几个排序比较简单,你最好看看数据结构的书,代码一下就能看懂了。呵呵 |
|
204_lwa
2012-07-04
理解思想 不看其他人的代码 把每种算法都实现一次 再去对比实现细节
这样学习算法的人飘过 其实JDK里就有这些算法的源码了 额。。相信很少人能实现得比这些大师们还优化吧 |