更快的排序算法《双端排序》

asdlcd 2018-04-24 03:08:20
更快的排序算法《双端排序》

在任何情况下均比现有公开已知的排序算法更快的排序算法

(若数组从小到大排列顺序)
首先比较未排序部分首尾元素,若首元素大于尾元素,则交换,否则略过

其次依次取未排序部分的第二元素至尾元素之前的元素,与首元素比较,若小于首元素则交换,若不小于,再与尾元素比较,若大于尾元素则交换,再依次使用第三第四等后面的元素与首元素或首尾元素比较

其原理为:主体部分最多通过两次比较确定其元素在数组中的或首,或尾,或中间部分的位置,而且在每次遍历之后其首尾元素将被排除,不重复操作。其他排序算法都是一次比较确定元素的一个位置,但从这方面讲,双端排序将比现有公开已知的其他排序算法都要快
C语言

void sort (int *a, int left, int right)
{
int temp;

while (left < right)
{
if (a[left] > a[right])
{
temp = a[left];
a[left] = a[right];
a[right] = temp;
}

int k = left + 1;
while (k < right)
{
if (a[k] < a[left])
{
temp = a[left];
a[left] =a[k];
a[k] = temp;
}

if (a[k] > a[right])
{
temp = a[right];
a[right] = a[k];
a[k] = temp;
}
k++;
}

left++;
right--;
}
...全文
1065 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
英雄@末路 2018-10-09
  • 打赏
  • 举报
回复
原理和冒泡排序一样吧?
别闹宝贝 2018-08-13
  • 打赏
  • 举报
回复
还不如冒泡
HeruiPrograming 2018-08-11
  • 打赏
  • 举报
回复
这个算法每次迭代中没有学到任何东西,和选择排序一样,只能算是选择排序的变种。
kernelkoder 2018-08-05
  • 打赏
  • 举报
回复
很不错的知识
Moyiii 2018-08-02
  • 打赏
  • 举报
回复
这是一个尝试改进“选择排序”的方法吧。选择排序每次只选出最小值或最大值。这个算法每次同时选出最大值和最小值放在数组的两端。n * 1 = (n/2) * 2
636f6c696e 2018-07-21
  • 打赏
  • 举报
回复
建议重新学习下排序算法时间复杂度的计算方式
lx3275852 2018-06-29
  • 打赏
  • 举报
回复
孩子,不是我说你,你是刚学编程一年不到的萌新吧。。 被你的标题吸引进来了,结果大失所望…有你这精力,不如多学学习,别耍这些小聪明…… 这就一非常非常普通的O(N^2)的排序算法,估计连冒泡的速度都比不上,有啥资格跟堆排序、快排、桶排序之类的比速度……

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧