算法汇总

1.冒泡排序

数组举例:{2,7,4,8,0,3,5,6,1}

时间复杂度:O(n^2)

代码示例:

public void BubbSortTest(int[] arr){

for (int i=0;i<arr.length-1;i++){

  for(int j=arr.length-1;j>i;j--){

    if(arr[j]<arr[j-1]){

      swap(arr[j],arr[j-1]);

    }

  }

}

private swap(int a,int b){

  int k=a;

  a=b;

  b=k;

}

}

2.选择排序:每一次比较选出最小的放到前面

时间复杂度:O(n^2)

 

int minIndex =0;

for{int i=0;i<arr.length-1;i++){

  minIndex = i;

  for(int j=i+1;j<arr.length-1;j++){

    if(arr[j]<arr[minindex]){

      minIndex = j;

    }

  }

  if(minIndex != i){

    交换arr[i]与arr[minIndex]的位置。

  }

}

 

3.插入排序:类似纸牌排序

时间复杂度O(n^2)

以第一个数为目标数开始进行插入移位

for(int i=1;i<arr.lentgh;i++){

  int j = i;

  int target = arr[i];

  while(j>0 && target<arr[j-1]){

    arr[j] = arr[j-1];

    j--;

  }

  arr[j] = target;

}

 

4.快速排序

时间复杂度O(nlogn)

quickSort(arr,0,arr.length-1);

public static void quickSort(int[] arr,int left,int right){

  int org_left = left;

  int org_right = right;

  int target = arr[left];

  if(left>=right)

    return;

  while(left<right && arr[right]<=target){

    arr[left] = arr[right];

    left++;

  }

  while(left<right && arr[left]> target){

    arr[right] = arr[left];

    right--;

  }

  arr[left] = target;

  qulckSort(arr,org_left,left-1);

  quickSort(arr,left+1,right);

}

posted @ 2019-08-09 15:39  tingtasia  阅读(182)  评论(0编辑  收藏  举报