1.if i==0,we should straightly i++;
2.else if it’s ordered until a[i],we should i++ to skip
3.if it is unordered until a[i],we should swap,and then Roll back to i-1 to rejudge
c语言
#include<stdio.h>
void gnomesort(int a[],int n)
{
int i = 0;
while (i < n)
if (i == 0 || a[i-1] <= a[i]) i++;
else
{
int tmp = a[i];
a[i] = a[i-1];
a[--i] = tmp;
}
}
int main()
{
int a[5]= {7,4,1,3,2};
gnomesort(a,5);
for(int i=0; i<5; i++)printf("%d ",a[i]);
}
来自:
http://www.cnblogs.com/kkun/archive/2011/11/23/2260296.html
http://blog.youkuaiyun.com/winark/article/details/5918944