cqoi浅谈On2 的排序

来源:互联网 发布:swf工具 for mac 编辑:程序博客网 时间:2024/05/23 00:01

先讲一下被称做最简单的排序的地精算法

贴代码:

void gnomeSort(int n,int ar[]) //我们的地精排序{int i = 0;//辅助变量while(i < n){if(i == 0||ar[i-1]<=ar[i])//如果i-1 和 i 是正序时,地精向前走一步i++;elseswap(ar[i],ar[i-1]),i--;//如果逆序时,地精把两个数交换}} 

这个其实就是大部分0n2的思想了

看看冒泡,有没有感觉很相似

冒泡:

void bubbleSort(int ar[], int n)  {      for (int i = 0; i < n-1; i++)  //数组过一遍    {          for (int j = i + 1; j < n-1; j++)          {              if (ar[i]>ar[j])  //逆序就交换,交换次数 == 逆序列数量                swap(i, j);          }      }  }
是不是,也是一遍一遍搜,逆序交换

下面是选择的代码,核心思想是把最小数调到前面:

void selectSort(int r[], int n){      int i,index,j,temp;      for(i=1; i<n; i++) //执行i次扫描     {  

        index = i;          for(j=i+1; j<n; j++)  //比较无序数列        {              if(r[index] > r[j]) //最小值扫描            {                  index = j;              }          }          if(index != i) //调到队头        {              temp = r[index];              r[index] = r[i];              r[i] = temp;          }      }  }

最后一个,插入排序,也就是在数组中找A,B

使要求数C的位置是a++,b--,

代码:

void InsertionSort(int a[], int len)  {      for (int j=1; j<len; j++)      {          int key = a[j];          int i = j-1;          while (i>=0 && a[i]>key)          {              a[i+1] = a[i];              i--;          }          a[i+1] = key;      }  }  

这个不用解释吧,就是找最接近的2个数

今天就到这里

下次继续写  n log n 的,大家在见,有问题私信我

原创粉丝点击