排序算法
冒泡排序
一般不用。将序列中所有元素两两比较,将最大的放在最后面。将剩余序列中所有元素两两比较,将最大的放在最后面。 重复第二步,直到只剩下一个数。
如何写成代码:
设置循环次数。
设置开始比较的位数,和结束的位数。
两两比较,将最小的放到前面去。
重复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));
}
}
}
}