冒泡排序
经过一轮排序之后,就会有一个数被放到正确的位置上,若目标序列是从小到大的顺序,那么第一轮排序结
束之后,最大的数会被放到最后,第二轮排序之后,次大的数字就被放到了倒数第二个,以此类推……
时间复杂度为O(n^2)
public class Test {
public static void main(String []agrs) {
int[] arr=new int[]{20,32,25,66,24,35,85,11};
int temp;
for(int i=0;i<arr.length;i++) {
boolean flag=true;
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=false;
}
}
//当flag为true时,表示这一轮没有交换,若一次交换都没有表示已经排好序了
if(flag) {
break;
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序
每一轮标记最小的的值,并将它放在指定的位置,若目标序列是从小到大的顺序,那么第一轮结束之后,最
小的值会放在第一位,第二轮结束之后,次小的值会放在第二位,以此类推……
时间复杂度为O(n^2)
public class Test {
public static void main(String []agrs) {
int[] arr=new int[]{20,32,25,66,24,35,85,11};
int temp,k;
for(int i=0;i<arr.length;i++) {
k=i;
for(int j=i+1;j<arr.length;j++) {
//k用来标记最小的值
if(arr[j]<arr[k]) {
k=j;
}
}
if(arr[k]!=arr[i]) {
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
插入排序
设置一个变量temp用来标记要插入的对象,将数组分为两个部分,前半部分在排序的过程中元素个数由1变成
n,后半部分则由n-1变成0;前半部分是已经排好序的,在每一轮中从后半部分没有排好序的数据中取出一个
数据,将其插入到前半部分中适当的位置(每一轮中的j+1为最后要插入的位置,temp为要插入的数据)若要
插入的数据小于arr[j],就将temp对应索引位置的前面位置的数据依次后移,最终j+1为要插入的位置。
时间复杂度为O(n^2)
public class Test {
public static void main(String []agrs) {
int[] arr=new int[]{20,32,25,66,24,35,85,11};
int temp,j;
for(int i=1;i<arr.length;i++) {
j=i-1;
temp=arr[i];
while(j>-1&&temp<arr[j]) {
arr[j+1]=arr[j];
j--;
}
arr[j+1]=temp;
}
System.out.println(Arrays.toString(arr));
}
}