开发过程中可能不会常用到复杂的算法。不过排序还是很常见的。今天学习一下插入排序(insertIntoSort)。
插入排序简单来说就是将一个数组分成两部分,前面部分是排好序的,后面部分是乱序的。通过将乱序部分的数值在有序的部分找到合适的位置,并将其插入进去。
在算法导论中,伪代码描述的for循环是2~A.length()。是因为书中假定数组开始位置是从1开始的,而实际数组开始是从0开始的,所以在写代码的时候要留意(记录下来,怕忘记)。
上代码好了 ,Java:
private static void insterIntoSort(int arr[]) {
int key = 0;//当前准备插进去的数值
int i = 0;
for (int j = 1; j < arr.length; j++) {
i = j - 1;
key = arr[j];
while (i >= 0 && arr[i] > key) {
arr[i+1] = arr[i]; //这里用i+1不用j的原因是,因为在while循环里,是从左往右找合适位置
i = i-1;
}
arr[i+1] = key; //把key放到合适的位置
}
}
另外,最近在学python,也上一份python的代码
def insert_into_sort(array):#函数定义
for j in range(1, len(array)):
print j
key = array[j]
i = j - 1
while i >= 0 and array[i] > key:
print "i=%d" % i
array[i + 1] = array[i]
i = i - 1 #while循环结束
array[i + 1] = key
#for循环结束
print array
#insert_into_sort函数结束
# insert_into_sort([2, 1, 5, 8, 7, 3])
insert_into_sort([5, 2, 4, 6, 1, 3]) #函数调用