我们首先介绍插入排序,对于少量元素的排序,它是一个有效的算法。插人排序的工作方式像许多人排序一手扑克牌。 开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插人左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌
堆中顶部的牌。
对于插入排序,我们将其伪代码过程命名为INSERTION SORT,其中的参数是一个数组 A[..n],包含长度为n的要排序的一个序列。(在代码中,A中元素的数目n用A. length来表示。)该算法原址排
序输人的数:算法在数组A中重排这些数,在任何时候,最多只有其中的常数个数字存储在数组外
面。在过程INSERTION-SORT结束时,输人数组A包含排序好的输出序列。
伪代码如下:
INSERTIONSORT(A):
1 forj = 2 to A. length
2 key= A[j]
3 // Insert A[j] into the sorted sequenceA[1..j一1]
4 i = j - 1
5 whilei> 0 and A[门> key
6 A[i+1]= A[i]
7 i=i- 1
8 A[i+ 1]= key
JAVA代码:
package suanfa;
import java.util.*;
public class InsertSort {
public static int[] Sort(int[] arr) { //插入排序函数
int n = arr.length;
for(int j = 1; j < n; j++){
int key = arr[j];
int i = j-1;
while(i >= 0 && arr[i] > key){ //找到合适的位置,将每一次的新数据插入
arr[i+1]=arr[i];
i = i -1;
}
arr[i+1] = key;
}
return arr;
}
public static void main(String args[]){
int n;
Scanner input = new Scanner(System.in);
System.out.println("请输入需要排序的数字个数:");
n = input.nextInt();
int[] arr = new int[n];
for (int i = 0;i<n;i++){
arr[i] = input.nextInt();
}
arr = Sort(arr);
for (int i = 0;i < arr.length;i++){
System.out.printf(arr[i]+" ");
}
}
}
Python代码:
def InsertSort(list1) :
n = len(list1)
for j in range(1,n):
key = list1[j]
i = j - 1
while i >= 0 and list1[i] > key:
list1[i + 1] = list1[i]
i = i-1
list1[i+1] = key
return list1
n = int(input("请输入需要排序的个数"))
list1=[]
for i in range(0,n):
k = int(input("请输入值:"))
list1.append(k)
list1 = InsertSort(list1)
print(list1)