Description
实现插入排序。
Input
输入第一行为用例个数, 每个测试用例输入的每一行代表一个数组,其中的值用空格隔开,第一个值表示数组的长度。
Output
输出排序的数组,用空格隔开,末尾不要空格。
Sample Input 1
1
13 24 3 56 34 3 78 12 29 49 84 51 9 100
Sample Output 1
3 3 9 12 24 29 34 49 51 56 78 84 100
Solution🌻
import java.util.Scanner;
public class Main{
static void swap(int[] a,int i,int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int t=scanner.nextInt();
while(t!=0) {
t--;
int n = scanner.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++)
a[i]=scanner.nextInt();
//insertsort
for(int i=0;i<n;i++){
int val=a[i];
int index=i;
for(int j=i-1;j>=0;j--){
if(a[j]>val){
swap(a,index,j);
index=j;
}
else
break;
}
}
for(int i=0;i<n;i++){
if(i==n-1)
System.out.print(a[i]);
else
System.out.print(a[i]+" ");
}
}
}
}
Review🌻
复习插入排序。插入排序思想是将待排序的元素插入到已排好序的序列中,直至插入完所有的元素为止。以[3,7,2,9,8]为例子展示:
-
由于需要插入五个元素,因此需要遍历五次将它们插入到已排好序的序列中,此处的时间复杂度为O(N);
-
对于每个插入的元素而言,每当遇到比他大的元素,二者交换位置,直至遇到比他小的元素为止,此处的平均时间复杂度是O(N),最好时间复杂度为O(1);
-
综上插入排序算法的最好时间复杂度为O(N),插入排序算法的平均时间复杂度与最差时间复杂度为
O ( N 2 ) O(N^2) O(N2)
- 综上插入排序算法的最好时间复杂度为O(N),插入排序算法的平均时间复杂度与最差时间复杂度为
O ( N 2 ) O(N^2) O(N2)