插入排序
算法描述
核心:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。
(1)从第一个元素开始,该元素可以认为已经被排序。
(2)取出下一个元素,在已经排序的元素序列中从后向前扫描。
(3)如果此元素(已排好序的序列中的被扫描到的元素)大于新元素,则将此元素移动到下一个位置。
(4)重复上一个步骤,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后,重复上面的步骤。
复杂度分析
代码(三种语言)
c++
#include<iostream>
using namespace std;
#define Maxlength_arr 100
int a[Maxlength_arr];
int tmp;
int main(){
cout<<"请输入数组长度:";
int n;
cin>>n;
cout<<"请输入数组中的每一个元素:";
for(int i = 0;i<n;i++){
cin>>a[i];
}
for(int i = 1;i<n;i++){
if(a[i]<a[i-1]){
tmp = a[i];
int j = i;
for(j = i;j>=1&&a[j-1]>tmp;j--){
a[j] = a[j-1];
}
a[j] = tmp;
}
}
cout<<"排序完成!"<<endl;
for(int i=0;i<n;i++)cout<<a[i]<<" ";
cout<<endl;
return 0;
}
python
print("请输入数组,格式为[x1,x2,x3...]:")
print("\n")
arr = eval(input())
for i in range(1,len(arr)):
if(arr[i]<arr[i-1]):
tmp = arr[i]
j = i
while j>=1 and (arr[j-1] > tmp):
arr[j] = arr[j-1]
j-=1
arr[j] = tmp
print("排序完成!")
print(arr)
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//System.out.println("please enter the length of the array");
System.out.println("请输入数组的长度");
Scanner myin = new Scanner(System.in);
int len = myin.nextInt();
int arr[] = new int[len];
System.out.println("请输入数组中的每一个元素");
for(int i = 0;i<arr.length;i++){
arr[i] = myin.nextInt();
}
insert_sort(arr);
System.out.println("排序完成!");
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]);
System.out.print(" ");
}
}
public static void insert_sort(int[] a){
int len_a = a.length;
for(int i = 1 ;i<len_a;i++){
if(a[i]<a[i-1]){
int tmp = a[i];
int j = i;
for(;j>=1&&a[j-1]>tmp;j--){
a[j] = a[j-1];
}
a[j] = tmp;
}
}
}
}