10大排序,八大排序总结

  10大排序,八大排序总结

  Yyds干货库存

  @TOC

  首先,直接插入排序

  将待排序的记录按照它们的键值逐一插入到一个有序序列中,直到所有记录都被插入,得到一个新的有序序列。

  2.直接插入排序的实现。

  Voidinsertport (int * a,int SZ)//直接插入排序[0 end]是有序的,在end 1位置插入的值使得[0 end 1]也是有序的。

  int I=0;//假设我们想按升序排序

  for(I=0;I SZ-1;I)//不能获取sz-1,否则tmp会造成越界访问。

  int end=I;

  int tmp=a[end 1];//最后一个数据

  while (end=0)

  If (a[end] tmp)//如果数组中的数据大于tmp

  a[结束1]=a[结束];

  end-;

  其他

  打破;//找到比tmp小的东西,结束循环

  a[end 1]=tmp;//防止tmp小于所有数据

  }

  直接插入排序的时间复杂度

  第二,希尔排序

  其思路是:首先选择一个整数,将待排序文件中的所有记录分组,距离内的所有记录都在同一组,然后对每组中的记录进行排序,重复分组排序,直到=1。

  Hill是直接插入排序的优化。

  1.首先进行预排序,使数组接近顺序。

  2.直接插入排序

  这时发现多组的间隔是gap的前序,gap由大变小。

  差距越大,大的数字越快来到后面,小的数字越快来到前面。

  间隙越大,预排时越不有序。

  差距越小,越接近有序。

  当gap=1时,直接插入即时排序。

  2.希尔排序的实现。

  Void shellsort(int* a,int n)//Hill排序

  int I=0;

  int gap=n;

  while(间隙1)

  gap=gap/3 1;//同时排列多组有间隙间隔的数据。

  for(I=0;I n-gap;I )//如果gap改为1,则直接插入排序。

  int end=I;

  int tmp=a[端隙];

  while (end=0)

  if(一个[end] tmp)

  a[末端缺口]=a[末端];

  end=end-gap;

  其他

  打破;

  a[末端间隙]=tmp;

  }

  3.Hill排序的时间复杂度

  Gap=n,gap=gap/3 ^ 1,即n=n/3 ^ 1。

  假设x是运算次数3 x=n1x=log3n1

  时间复杂度为O(log 3 N)

  2.预排序会使数组接近有序。比如gap=1时,是直接插入排序,时间复杂度为O(N)

  希尔排序的总时间复杂度为O(N *log 3 N)

  第三,直接选择排序。

  1.直接选择排序的实现

  Voidselectsort (Intarr [],Intn)//直接选择排序

  int begin=0;

  int end=n-1;

  while(开始结束)

  int max=begin

  int min=begin

  int I=0;

  for(I=begin;i=结束;我)

  if (arr[i] arr[min])

  min=I;//通过交换找到最大值的坐标

  if (arr[i] arr[max])

  max=I;//通过交换找到最小坐标

  swap( arr[begin],arr[min]);//通过坐标将最小值交换到起点

  if (begin==max)

  max=min

  swap( arr[end],arr[max]);//通过坐标将最大值交换到末尾

  开始;

  end-;

  }

  2.有关注意事项

  3.直接选择排序的时间复杂度

  直接选择排序,不管数组是有序的(最好的情况)还是无序的(最坏的情况),都需要遍历整个数组,

  时间复杂度为o (n 2)

  第四,堆排序

  点击这里:堆排序的详细解释

  第五,冒泡排序

  1.冒泡排序的实现。

  void bubblesort(int* a,int sz)

  int I=0;

  int j=0;

  for(I=0;I SZ-1;I )//i代表出行次数。我在倒数第二次排列了这个数组。

  int exchange=0;

  for(j=0;j SZ-1-I;J )//j代表每次行程的对数。

  if (a[j] a[j 1])

  int tmp=0;

  tmp=a[j];

  a[j]=a[j 1];

  a[j 1]=tmp;

  交换=1;

  If (exchange==0)//表示如果遍历一次后没有比较,就是按顺序。

  打破;

  }

  2.冒泡排序的时间复杂度。

  正常情况下:

  在第一次行程中,总共比较了n-1次,

  在第二次行程中,总共比较了n-2次,

  在第n-1次旅行中,总共进行了一次比较。

  运算次数为:N-1N-2N-3.1=N (N-1)/2

  由大O渐进法省略,时间复杂度为O (n 2)

  在最好的情况下:

  当数组排序时,例如:1 2 3 4 5

  只是按升序,遍历后发现不进入交换,交换==0跳出循环。

  时间复杂度为O(N)

  3.冒泡排序和直插排序谁更好?

  当数组接近顺序时,如:1 2 3 5 4 6

  1.气泡排序:

  2.直接插入排序:

  1 2 3 5 4 6

  时间复杂度为O(N)

  直接插入排序更好。

  。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: