交换排序中主要有:冒泡排序和快速排序

(1)冒泡排序比较简单每次每次两两比较,权值小的就向上升。这样一趟下来,就会得到最小的,依次循环后就会得到有序数列。

for(int i=0;i<lenth-1;i++)

{

    flag = 1;

    for(int j=lenth-1;j>0;j--)

    {

        if(m_num[j] < m_num[j-1])

        {

               temp = m_num[j-1];

               m_num[j-1] = m_num[j];

               m_num[j] = temp;

               flag = 0;

        }

    }

    if(flag == 1)  break;

}

(2)快速排序,这个在实现中的问题主要是防止递归中出现死循环。开始写的时候,由于交换条件交换条件写成m_num[j]<n,造成了死循环,在判断的时候只写了m_num[rear]>=n 而没有写head<rear,也造成了程序的死循环,由于循环的终止条件是head==rear,而且一旦交换,就会涉及坐标变化所以,所以对于head和rear的处理要特别注意。
int CChangeSort::Partition(int head,int rear)
{
   double n = m_num[head];
   while (head != rear)
   {
      while ((m_num[rear]>=n) && (head<rear))//head<rear
      {
           rear--;
       }
      if (head < rear)
      {
         m_num[head++] = m_num[rear];
      }

      while ((m_num[head]<=n) && (head<rear))
      {
          head++;
      }
     if (head < rear)
     {
          m_num[rear--] = m_num[head];
      }
   }
   m_num[head] = n;
   return head;
}
void CChangeSort::QuickSort(int head,int rear)
{
    int n;
    if (head < rear)
    {
        n = Partition(head,rear);
        QuickSort(head,n-1);
        QuickSort(n+1,rear);
     }
}

快速排序是不稳定的算法,快速排序是目前基于比较的内部排序方法中速度最快的。

posted on 2009-03-15 20:04  Ruby_Wang  阅读(293)  评论(0编辑  收藏  举报