最近入手python,在网上看到有人用经典排序算法练手,本人也打算效仿,谁知一开始在最简单的插入算法上卡壳,花了一点时间才弄明白原因,原代码如下:
def insert_sort( array ):
len = len( array )
for i in range( 1, len ):
temp = array[i]
j = i - 1
for j in range( j, -1, -1 ):
if array[j] <= temp:
break
else:
array[j+1] = array[j]
array[j+1] = temp
调试发现问题出在array[j+1] = temp上,当j等于0时且array[0] > temp时候,array[0]后移到array[1],而j却不会继续减小到-1,所以array[0]无法被赋值。比较一下两个语句片段就会明白其中原因:
c语言:
int j = 10;
for ( j = 10; j >=0; --j )
{
printf( "%d", j );
}
printf( "%d', j );
python:
j = 10
for j in range(10, -1, -1):
print( "%d" %j )
print( "%d", %j )
c语言输入: 10 9 8 7 6 5 4 3 2 1 0 -1
python输出:10 9 8 7 6 5 4 3 2 1 0 0
python的range函数到了边界会自动停止步进。所以上面的代码做一下修改就可以了:
def insert_sort( array ):
len = len( array )
for i in range( 1, len ):
temp = array[i]
j = i - 1
while j >= 0:
if array[j] <= temp:
break
else:
array[j+1] = array[j]
j -= 1
array[j+1] = temp