目录
1.简介
2.代码实现
3.思想
4.后言
1.简介
这个被网友称为最简单的算法(有比sort更简单的么??)当然比起不用自己敲的,这个还是比较简单,让我们直接放代码好吧
2.代码实现
#include<bits/stdc++.h>
using namespace std;
void gnomesort(int *a,int n)
{
int i=0;
while(i<n)
{
if(i==0||a[i-1]<=a[i])
{
i++;
}
else
{
swap(a[i],a[i-1]);
i--;
}
}
}
int main()
{
int n,i;
cin>>n;
int arr[n+5];
for(i=0;i<n;i++)cin>>arr[i];
gnomesort(arr,n);
for(i=0;i<n;i++)
{
cout<<arr[i];
if(i!=n-1)cout<<" ";
}
cout<<endl;
}
3.思想
这个排序说是叫做地精排序,算法的思想就是每次循环找到第一个逆序的元素,并把它和在它前面的已经排序好的元素逐个比较、交换,有点类似插入排序。(若要了解逆序,请看作者的冒泡排序章节,里面有关于逆序的定义和求法)
4.后言
地精排序代码很短,想法也很棒,但是这并不能使它脱离O(n^2)的大家族,效率确实不高,花里胡哨的没啥用,学这个也只是加强思维,没有实际作用。
喜欢的话加个关注吧!我是wanna_ac,每天给你带来一段好玩的(没用的)代码。