| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 467 人关注过本帖
标题:如何让5.6.7后面那三种方法直接显示出结果呢?
取消只看楼主 加入收藏
发光
Rank: 1
来 自:广西
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-29
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
如何让5.6.7后面那三种方法直接显示出结果呢?
就是不按8,让它像2.3.4前面那三种方法直接显示出排序结果来。
求解中...谢谢。
using System;

namespace Sort
{
  public class SortArithMetic
  {

    /* 直接插入排序算法 */
    public void InsertSort(SeqList<int> R)
    {
      for (int i = 1; i < R.Length; i++)
      {
        if (R.Data[i] < R.Data[i - 1])
        {
          int temp = R.Data[i];
          int j = 0;
          for (j = i - 1; j >= 0 && temp < R.Data[j]; j--)
          {
            R.Data[j + 1] = R.Data[j];
          }
          R.Data[j + 1] = temp;
        }
        //显示排序过程
        Console.Write("第{0}趟排序结果为:\n",i);
          for (int k = 0; k < R.Length; k++)
        {
            Console.Write("{0} ", R.Data[k]);
        }
            Console.Write("\n");
      }
      
    }
     public void ShellSort(SeqList<int> R, int[] increment)
    {//希尔排序中的一趟排序,d为当前增量
        int i, j, temp, d;
        for (int m = 0; m < increment.Length; m++)
        {
            d = increment[m];
            //将R[d+1…n]分别插入各组当前的有序区
            for(i=d;i<R.Length;i++)
                if (R.Data[i] < R.Data[i - d])
                {
                    temp = R.Data[i]; j = i - d;
                    do
                    {//查找R[i]的插入位置
                        R.Data[j + d] = R.Data[j]; //后移记录
                        j = j - d;  //查找前一记录
                    }
                    while (j > 0 && temp < R.Data[j]);
                    R.Data[j + d] = temp; //插入R[i]到正确的位置上
                }
            //显示排序过程
            Console.Write("第{0}趟排序结果为:\n", i);
            for (int k = 0; k < R.Length; k++)
            {
                Console.Write("{0} ", R.Data[k]);
            }
            Console.Write("\n");
        }

    }

     //直接选择排序
      public void SelectSort(SeqList<int> R)
      {
          int i, j, k;
          int temp;
          for (i = 0; i < R.Length - 1; i++)
          {//做第i趟排序
              k = i;
              for (j = i + 1; j < R.Length; j++)
                  if (R.Data[j] < R.Data[k])
                      k = j;//k记下目前找到的最小关键字所在的位置
              if(k!=i)
              {
                  //交换
                  temp = R.Data[i]; R.Data[i] = R.Data[k]; R.Data[k] = temp;
              }
              //显示排序过程
              Console.Write("第{0}趟排序结果为:\n", i);
              for (int q = 0; q < R.Length; q++)
              {
                  Console.Write("{0} ", R.Data[q]);
              }
              Console.Write("\n");
          }
      }

      //冒泡排序
      public void BubbleSort(SeqList<int> R)
      {
          int i, j;
          Boolean exchange;  //交换标志
          int tmp;
          int n = R.Length;
          for (i = 1; i < n; i++)
          {//最多做n-1趟排序
              exchange = false;  //本趟排序开始前,交换标志应为假
              for (j = 0; j < n - i; j++)  //对当前无序区R[0…n-i]自下向上扫描
                  if (R.Data[j] > R.Data[j + 1])
                  {//交换记录
                      tmp = R.Data[j + 1];
                      R.Data[j + 1] = R.Data[j];
                      R.Data[j] = tmp;
                      exchange = true;  //发生了交换,故将交换标志置为真
                  }
              if (!exchange)   //本趟排序未发生交换,提前终止算法
              return;
          }
        
      }

      //快速排序
      public void QuickSort(SeqList<int> sqList, int low, int high)
      {
          if (low > high) return;
          int pivot = sqList.Data[low];
          int i = low + 1;
          int j = high;
          int temp;
          while (i < j)
          {
              while ((i < j) && (sqList.Data[i] <= pivot))
              {
                  ++i;
              }
              while ((j >= i) && (sqList.Data[j] >= pivot))
              {
                  --j;
              }
              if (i < j)
              {
                  temp = sqList.Data[i];
                  sqList.Data[i] = sqList.Data[j];
                  sqList.Data[j] = temp;
              }
          }
          if (low < j)
          {
              temp = sqList.Data[low];
              sqList.Data[low] = sqList.Data[j];
              sqList.Data[j] = temp;
          }
          QuickSort(sqList, low, j - 1);
          QuickSort(sqList, j + 1, high);
      }



    //归并排序
      public void MergeSort(SeqList<int> sqList)
      {
          int k = 1;  //归并增量
          while (k < sqList.GetLength())
          {
              Merge(sqList, k);
              k *= 2;
          }
      }
      public void Merge(SeqList<int> sqList, int len)
      {
          int m = 0;  //临时顺序表的起始位置
          int l1 = 0;  //第1个有序表的起始位置
          int h1;  //第1个有序表的结束位置
          int l2;  //第2个有序表的起始位置
          int h2;  //第2个有序表的结束位置
          int i = 0;
          int j = 0;
          //临时表,用于临时将两个有序表合并为一个有序表
          SeqList<int> tmp = new SeqList<int>(sqList.GetLength());
          //归并处理
          while (l1 + len < sqList.GetLength())
          {
              l2 = l1 + len;  //第2个有序表的起始位置
              h1 = l2 - 1;   //第1个有序表的结束位置
              //第2个有序表的结束位置
              h2 = (l2 + len - 1 < sqList.GetLength()) ? l2 + len - 1 : sqList.Length - 1;
              j = l2;
              i = l1;
              //两个有序表中的记录没有排序完
              while ((i <= h1) && (j <= h2))
              {
                  //第1个有序表记录的关键码小于第个有序表记录的关键码
                  if (sqList.Data[i] <= sqList.Data[j])
                  {
                      tmp.Data[m++] = sqList.Data[i++];
                  }
                  //第2个有序表记录的关键码小于第个有序表记录的关键码
                  else
                  {
                      tmp.Data[m++] = sqList.Data[j++];
                  }
              }
              //第1个有序表中还有记录没有排序完
              while (i <= h1)
              {
                  tmp.Data[m++] = sqList.Data[i++];
              }
              //第2个有序表中还有记录没有排序完
              while(j<=h2)
              {
                  tmp.Data[m++] = sqList.Data[j++];
              }
              l1 = h2 + 1;
          }
          i = l1;
          //原顺序表中还有记录没有排完
          while(i<sqList.GetLength())
          {
              tmp.Data[m++] = sqList.Data[i++];
          }
          //临时顺序表中的记录复制到原顺序表,使原顺序表中的记录有序
          for(i=0;i<sqList.GetLength();++i)
          {
              sqList.Data[i] = tmp.Data[i];
          }
      }
  }
}
Sort.zip (36.25 KB)
搜索更多相关主题的帖子: 结果 
2010-12-06 16:41
发光
Rank: 1
来 自:广西
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-29
收藏
得分:0 
回复 2楼 c1_wangyf
是呀,蛮长的。写了出来的代码我基本上都懂了,就是不够完善,现在就想让它完善一点。
2010-12-07 10:29
快速回复:如何让5.6.7后面那三种方法直接显示出结果呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020637 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved