整形数组里面数据按大小排列 请问怎样写???

解决方案 »

  1.   

    我的意思是说在插入的时候就进行处理比较简单,当然也可以对已有的数组进行处理,有很多种算法。以下是我在C#中对一个字符串的几种排序方法,基本上是C语言的语法,要转换成对数组的处理应该也比较简单    /// <summary>
        ///     快速排序的基本思想:通过一趟排序将待排的内容分割为独立的两部分,其中一部分内
        /// 容的关键字均比另一部分的关键字小,然后再分别对这两部分记录继续进行排序,以达到整
        /// 个序列有序。
        ///     一趟快速排序的具体做法是:附设两个指针Low和High,它们的初值分别指向待排内容
        /// 的第一个记录和最后一个记录。设枢轴(通常是第一个记录)的关键字为pivot,则首先从
        /// High所指位置向前搜索,找到第一个关键字小于pivot的记录并与枢轴记录互相交换,然后
        /// 从所指位置起向后搜索,找到第一个关键字大于pivot的记录并与枢轴记录互相交换,重复
        /// 这两步直至Low=High为止。
        /// </summary>
        /// <param name="str">要排序的字符串</param>
        /// <param name="Low">下标(从哪个字符开始排序)</param>
        /// <param name="High">上标(在哪个字符结束排序)</param>
        private void QuickSort(ref string str, int Low, int High)
        {
          int i, j;
          char pivot;
          char[] s;      s = str.ToCharArray();
          if(Low < High)  //以字符串的第一个字符作为基准进行划分
          {
            pivot = s[Low];
            i = Low;
            j = High;
            while(i < j)  //从字符串的两端交替的向中间扫描
            {
              while((i < j) && (s[j] >= pivot)) j--;
              if (i < j) s[i++] = s[j];  //比枢轴元素小者移到低下标端
              while((i < j) && (s[i] <= pivot)) i++;
              if (i < j) s[j--] = s[i];  //比枢轴元素大者移到高下标端
            }
            s[i] = pivot;  //枢轴元素移动到正确的位置
            str = CharArrayToString(s);
            QuickSort(ref str, Low, i - 1);  //对前半个子表递归排序
            QuickSort(ref str, i + 1, High); //对后半个子表递归排序
          }
        }    /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <param name="n">对前n个字符进行排序</param>
        private void BubbleSort(ref string s, int n)
        {
          char[] data;
          char temp;
          int i, j, tag;
          
          data = s.ToCharArray();
          for (i = 0, tag = 1; tag == 1 && i < n - 1; i++)
          {
            tag = 0;
            for (j = 0; j < n - i - 1; j++)
              if (data[j] > data[j + 1])
              {
                temp = data[j]; 
                data[j] = data[j + 1];
                data[j + 1] = temp;
                tag = 1;
              }
          }
          s = CharArrayToString(data);
        }    /// <summary>
        /// 直接插入排序
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <param name="n">对前n个字符进行排序</param>
        private void DirectInsertSort(ref string s, int n)
        {
          if (s.Length < 1) return;      char[] data = s.ToCharArray();
          int i, j, k;
          char t;      for (i = 1; i < n; i++)
          {
            t = data[i];
            for (j = 0; j < i; j++)
              if (data[j] > t) 
              {
                for (k = i; k >= (j + 1); k--) data[k] = data[k - 1];
                data[j] = t;
                break;
              }
          }
          s = CharArrayToString(data);
        }    /// <summary>
        ///     希尔排序又称“缩小增量排序”,是对直接插入排序方法的改进。
        ///     希尔排序的基本思想:先将整个待排记录序列分割成若干序列,然后分别进行直接插入
        /// 排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。具体做法是
        /// :先取定一个小于n的整数d1作为第一个增量,把序列的全部记录分成d1个组,将所有距离
        /// d1倍数的记录放在同一个组,在各组中进行直接插入排序;然后取第二个增量d2<d1,重复
        /// 上述分组和排序工作,依此类推,直至所取的增量di = 1(di<di-1<...<d1),即所有记
        /// 录放在同一组内进行直接插入排序为止。
        /// </summary>
        /// <param name="s">源字符串</param>
        /// <param name="n">对前n个字符进行排序</param>
        private void ShellSort(ref string s, int n)
        {
          char[] data = s.ToCharArray();
          int[] delta = new int[(n / 2) + 1];
          int k, i, dk, j;
          char t;      k = n;
          i = 0;
          do {k = k / 2; delta[i++] = k;} while (k > 0);
          i = 0;
          while (delta[i] > 0)
          {
            dk = delta[i];
            for (k = delta[i]; k < n; ++k)
              if (data[k] < data[k - dk]) //将元素data[k]插入到有序增量子表中
              {
                t = data[k];              //备份待插入的元素,空出一个元素位置
                for (j = k - dk; j >= 0 && t < data[j]; j -= dk)
                  data[j + dk] = data[j]; //寻找插入位置的同时后移
                data[j + dk] = t;         //找到插入位置,插入元素
              }
            ++i;                          //取下一个增量值
          }
          s = CharArrayToString(data);
        }
      

  2.   

    写一个SortArr啊;
    procedure sortarr(var arr: TintArr,upindex:integer);
    var i,j,temp:integer;
    begin
      for i:=1 to upindex do
      begin
        k:=i;
        for j:=i to upindex do
          if arr[k]<a[j] then k=j;
        if k<>i then
        begin
          temp:=arr[i]; arr[i]:=arr[j]; a[j]:=temp;
        end;
      end;end;
      

  3.   

    把这些数放到一个有排序属性的控件里,比如combobox,然后再取出来。哈哈哈,这样可以啊。。试试看。
      

  4.   

    qizhf(齐齐)的就是冒泡排序了,呵呵
      

  5.   

    to qizhf(齐齐) 你写的东西有很多问题,
      

  6.   

    procedure fSort(var inX:array of double);
    var temp:double;
        i,j,n:integer;
        flag:boolean;
    Begin
     for i:=Low(inX) to High(inX) do
       for j := Low(inX) to High(inX) - 1 do
          if inX[j] > inX[j + 1] then
          begin
            temp := inX[j];
            inX[j] := inX[j + 1];
            inX[j + 1] := temp;
         end;end;
      

  7.   

    To: bbm011(只爱花香)
      我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
      

  8.   

    To: bbm011(只爱花香)
      我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序
      

  9.   

    To: bbm011(只爱花香)
      我考试不久,严、吴的ds课本放下不久,我写的应该是对的,这是简单选择排序,你的才是真正的冒泡排序