排序算法

冒泡排序

一般不用。将序列中所有元素两两比较,将最大的放在最后面。将剩余序列中所有元素两两比较,将最大的放在最后面。 重复第二步,直到只剩下一个数。

如何写成代码:

设置循环次数。

设置开始比较的位数,和结束的位数。

两两比较,将最小的放到前面去。

重复2、3步,直到循环次数完毕。

代码实现如下:

  1. public static void bubbleSort(int[] arr) {
  2. int temp = 0;
  3. for (int i = arr.length - 1; i > 0; i--) { // 每次需要排序的长度
  4. for (int j = 0; j < i; j++) { // 从第一个元素到第i个元素
  5. if (arr[j] > arr[j + 1]) {
  6. temp = arr[j];
  7. arr[j] = arr[j + 1];
  8. arr[j + 1] = temp;
  9. }
  10. }//loop j
  11. }//loop i
  12. }// method bubbleSort

代码优化
在数据完全有序的时候展现出最优时间复杂度,为O(n)。其他情况下,几乎总是O( n2 )。因此,算法在数据基本有序的情况下,性能最好。
要使算法在最佳情况下有O(n)复杂度,需要做一些改进,增加一个swap的标志,当前一轮没有进行交换时,说明数组已经有序,没有必要再进行下一轮的循环了,直接退出。

  1. public static void mian(String [] args){
  2. int a[] = {1,545,45,22,778,66,12,33,58,61}
  3. int num = 0;
  4. for(int i >a.length-1;i>0;i++){
  5. for(int j =0; j<i;j++){
  6. if(a[j] >a[j+1]){
  7. num = a[j];
  8. a[j]=a[j+1];
  9. a[j+1] = num;
  10. System.out.print(Arrays.toString(a));
  11. }
  12. }
  13. }
  14. }

查找算法

递归算法