第三章:关于一些简单排序的比较和代码
简单排序中分为4种类型:
1.冒泡排序(这个想必是各位非常熟悉,平时也接触得比较多的)
2.选择排序
3.插入排序
1.冒泡排序
一般来说,数组中如果有N个数据项,则第一趟排序中有N-1次比较,第二趟有N-2次,依次类推后其序列的求和公式为:
(N-1)+(N-2)+(N-3)+...+1 = N*(N-1)/2
这样来看,算法作了约N²/2次比较(忽略减1),交换和比较操作次数都与N²成正比,所以这种排序算法的速度是很慢的。
2.选择排序
选择排序与冒泡排序执行了相同次数的比较:N*(N-1)/2。但是交互的次数只有N次。
3.插入排序
在绝大部分情况下,插入排序算法是简单算法中最好的一种,虽然插入排序仍然需要O(N²)的时间,但是在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。
代码如下:
1 public class BubbleSortTest { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int max = 10; 9 BubbleArray bArray = new BubbleArray(max); 10 bArray.insert(12); 11 bArray.insert(23); 12 bArray.insert(232); 13 bArray.insert(1); 14 bArray.insert(5); 15 bArray.insert(33); 16 bArray.insert(51); 17 bArray.insert(41); 18 bArray.insert(22); 19 bArray.insert(98); 20 bArray.display(); 21 // bArray.bubbleSort(); 22 // bArray.selectSort(); 23 bArray.insertSort(); 24 bArray.display(); 25 26 } 27 28 } 29 30 class BubbleArray { 31 private int[] array; 32 private int nElems; 33 34 public BubbleArray(int max) { 35 array = new int[max]; 36 nElems = 0; 37 } 38 39 public void insert(int value) { 40 array[nElems] = value; 41 nElems++; 42 } 43 44 public void display() { 45 for (int i = 0; i < array.length; i++) { 46 System.out.print(array[i] + " "); 47 } 48 System.out.println(""); 49 } 50 51 public void bubbleSort() { 52 int first; 53 int last; 54 for (last = array.length - 1; last > 1; last--) { 55 for (first = 0; first < last; first++) { 56 if(array[first]>array[first + 1]) { 57 swap(first, first + 1); 58 } 59 } 60 } 61 } 62 63 public void selectSort() { 64 int in,out,min; 65 for (out = 0; out < array.length - 1; out++) { 66 min = out; 67 System.out.println(min); 68 for (in = out + 1; in < array.length; in++) { 69 if (array[in] < array[min]) { 70 min = in; 71 } 72 } 73 swap(out, min); 74 } 75 } 76 77 public void insertSort() { 78 int in,out; 79 for (out = 1; out < array.length; out++) { 80 int temp = array[out]; 81 in = out; 82 while(in > 0 && array[in - 1] >= temp) { 83 array[in] = array[in - 1]; 84 --in; 85 } 86 array[in] = temp; 87 } 88 } 89 90 private void swap(int one, int two) { 91 // TODO Auto-generated method stub 92 int temp = array[one]; 93 array[one] = array[two]; 94 array[two] = temp; 95 } 96 }