排序算法
冒泡排序
一般不用。将序列中所有元素两两比较,将最大的放在最后面。将剩余序列中所有元素两两比较,将最大的放在最后面。 重复第二步,直到只剩下一个数。
如何写成代码:
设置循环次数。
设置开始比较的位数,和结束的位数。
两两比较,将最小的放到前面去。
重复2、3步,直到循环次数完毕。
代码实现如下:
public static void bubbleSort(int[] arr) {int temp = 0;for (int i = arr.length - 1; i > 0; i--) { // 每次需要排序的长度for (int j = 0; j < i; j++) { // 从第一个元素到第i个元素if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}//loop j}//loop i}// method bubbleSort
代码优化
在数据完全有序的时候展现出最优时间复杂度,为O(n)。其他情况下,几乎总是O( n2 )。因此,算法在数据基本有序的情况下,性能最好。
要使算法在最佳情况下有O(n)复杂度,需要做一些改进,增加一个swap的标志,当前一轮没有进行交换时,说明数组已经有序,没有必要再进行下一轮的循环了,直接退出。
public static void mian(String [] args){int a[] = {1,545,45,22,778,66,12,33,58,61}int num = 0;for(int i >a.length-1;i>0;i++){for(int j =0; j<i;j++){if(a[j] >a[j+1]){num = a[j];a[j]=a[j+1];a[j+1] = num;System.out.print(Arrays.toString(a));}}}}
