使用if和swap语句按升序排列数字

时间:2009-10-14 20:04:56

标签: c sorting

如何使用if和swap语句按升序排列数字?有人可以给我指点吗?

7 个答案:

答案 0 :(得分:3)

最容易学习排序算法的网站:

http://www.sorting-algorithms.com

具体为冒泡排序:

http://www.sorting-algorithms.com/bubble-sort

答案 1 :(得分:2)

您是否尝试过搜索排序算法?例如,wikipedia's article有一个十几个表。我相信你能找到一个你喜欢的。

P.S。更常见的算法的文章有漂亮的插图或动画。这些对我有很大的帮助,除了看起来很有趣。

答案 2 :(得分:2)

如何有效地对100万个32位整数进行排序的经典答案是:bubble sort is the wrong way to go。 ;)

开玩笑吧。关于如何对事物进行排序的经典答案是这个视频:"Sorting Out Sorting"鉴于该视频中的动画和解释,编写代码留给读者练习。

答案 3 :(得分:0)

您可以使用冒泡排序http://en.wikipedia.org/wiki/Bubble_sort

这是一个家庭作业问题吗?

答案 4 :(得分:0)

听起来很像家庭作业。避免冒泡排序 - 插入排序和选择排序更快,(至少对我来说)更容易理解。

编辑:我认为处理冒泡排序,学习经验或其他任何事情都没有多少借口。 AFAICT,泡沫排序首先被人们所知的唯一原因纯粹是历史事故:早在50年代,有一篇论文表明,对于有两个头的鼓式计算机来说,泡泡排序是最佳的,所以它一次可以访问两个数据项,这两个数据项按升序排列(仅限)。

即使这可能还不足以让人们记住它,但事实上,这篇论文似乎已成为第一个永远处理计算复杂性的论文。科学。在此之后的一段时间里,冒泡排序是任何对我们现在称之为计算机科学,算法,计算复杂性或任何非常相似的东西感兴趣的人研究的第一种算法。

这段历史事故(很久以来)安息吧。

答案 5 :(得分:0)

试试insertion sort;它理解和实现起来相当简单,似乎符合您的要求,并且可以让您很好地理解排序。您应该检查其他排序算法,至少如果您没有在课堂上学习更多(快速排序,合并排序等)。

编辑:从技术上讲,冒泡排序更接近你的要求(只是和交换)而不是插入排序,所以它可能是你的导师想到的......

答案 6 :(得分:-2)

你的意思是这样吗?

void sort3( int t[3] ){
  int m[3];
  if( t[0] > t[1] ){
    if( t[2] > t[0] ){
      m[0] = t[1]; m[1] = t[0]; m[2] = t[2];.
    } else {
      if( t[2] > t[1] ){
        m[0] = t[1]; m[1] = t[2]; m[2] = t[0];.
      } else {
        m[0] = t[2]; m[1] = t[1]; m[2] = t[0];.
      }
    }
  } else {
    if( t[2] > t[1] ){
      m[0] = t[0]; m[1] = t[1]; m[2] = t[2];.
    } else {
      if( t[2] > t[0] ){
        m[0] = t[0]; m[1] = t[2]; m[2] = t[1];.
      } else {
        m[0] = t[2]; m[1] = t[0]; m[2] = t[1];.
      }
    }
  }
  memcpy( t, m, sizeof m );
}

以这种方式排序4个元素需要97行,5个元素需要513行。 (我使用perl脚本生成代码。)

相关问题