算法汇总
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);
}