各种经典排序时间复杂度
摘自牛客网练习题评论区
冒泡排序
时间复杂度 双层循环 O(n*n)
public int[] bubble(int[] arr){
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length ; j++) {
if (arr[i] > arr[j]){//前者大于后者,向后走 - >升序. 小于号 降序
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));//利用Arrays工具类输出
return arr;
}
直接选择排序
根据索引
时间复杂度 双层循环 O(n*n)
public static int[] select(int[] arr){
int len = arr.length;
for (int i = 0; i < len; i++) {
int min = i;
for (int j = i; j < len; j++) {
if (arr[min] >arr[j]){
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
System.out.println(Arrays.toString(arr));
return arr;
}
插入排序
时间复杂度 O(n*n)
若有相同的数字,原位置的数字不会变,放在原数字的后面
public static void insert(int[] arr){
int length = arr.length;
int j;
for (int i=1;i<length;i++)
{
for(j = i;j>0 ;j--)
{
if (arr[j] < arr[j-1]){
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
快速排序
public static void fast(int[] arr,int start,int end){
int index = arr[start];//所有元素和数据第一个元素比较
int left = start;
int right = end;
while (left < right) {
while ((left < right)&&(arr[right]>index)) {
right--;
}
while ((left<right)&&(arr[left]<index)) {
left++;
}
if ((arr[left]==arr[right])&&(left<right)) {
left++;
} else {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
if (left-1>start) fast(arr,start,left-1);
if (right+1<end) fast(arr,right+1,end);
}
开了个公众号可关注