时间复杂度
下图就是选择排序时间复杂度,N平方,O(N^2)
时间复杂度就是常数操作数量的表达式:aN^2+bn+c,只要最高阶项.为什么会只算N平方,因为都是考虑数据量起来以后的情况。
选择排序与冒泡排序
选择排序
比方一个数组【4,2,3,1】,将其按照从小到达排列
其实就是先从第一个开始遍历,找到一个最小值放到首位,然后从第二个开始遍历,找到第二小的数放到第二位,以此类推
package class01;
import java.util.Arrays;
public class Code01_SelectionSort
{
public static void SelectionSort(int[] arr)
{
if(arr == null || arr.length < 2)
return;
for(int i = 0; i < arr.length;i ++)
{
int minIndex = i;
for(int j = i + 1; j < arr.length;j ++)
{
minIndex = arr[j] < arr[minIndex]?j:minIndex;
}
swap(arr,minIndex,i);
}
}
public static void swap(int[] arr,int i,int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
冒泡排序
如上图,上面是value,下面是index。从小到大排序
arr[o],arr[1],谁大谁在右
arr[1],arr[2],大大在右
arr[2],arr[3]
arr[3],arr[4]
arr[4],arr[5]
以此类推
这样一趟排序过后,最右边的必定是max
第二趟排序以后倒数第二个数必定是第二大的
package class01;
import java.util.Arrays;
public class Code02_BubbleSort
{
public static void BubbleSort(int[] arr)
{
if(arr == null || arr.length < 2)
return;
for(int i = arr.length-1;i > 0;i --)
{
for(int j = 0; j< i; j ++)
{
if(arr[j] > arr[j+1])
swap(arr,j,j+1)
}
}
}
public static void swap(int[] arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;