标题:请教C语言代码转为C#语言
只看楼主
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2016-3-2
结帖率:46.15%
已结贴  问题点数:20 回复次数:6 
请教C语言代码转为C#语言
我学的是C#语言,在网上查到一个排序可能不错,请大家帮忙把C语言转为C#语言,谢谢!
程序代码:
#include"stdio.h"
void main()
{
int i,j,p,t,k,temp,n=10,max;
int a[10]={99,45,9,75,78,42,48,66,70,17};
int b[10],d[10];
int c[10];
for(i=0;i<n;i++)
   c[i]=0;
for(i=0;i<n;i++)
  b[i]=a[i];            //拷贝中间数组
t=n;
while(t)                      //n趟记序排序
{
  i=p=t;
  k=1;
  for(i=0;i<t;i++)
    d[i]=i;       //分配数组元素初始序号
  while(i)
  {
    i=i/2;
    k=2*k;
  }
  k=k/2;                
  while(k)               //logn次稍大数比较
  {
    for(i=0,j=p-1;i<k;i++,j--)
  {
     if(b[i]>b[j])
    { 
     c[i]=d[i];
    }
  else
    {
    c[i]=d[j];
    }
  }
for(j=0;j<k;j++)                            //记住元素的序号
    {
      i=c[j];
      b[j]=a[i];
    }
for(j=0;j<k;j++)
    {
      d[j]=c[j];
    }
k=k/2;
p=(p+1)/2;
  }
max=c[0];
if(a[max]>a[t-1])                     //将最大元素放入序列最后
{
temp=a[max];
a[max]=a[t-1];
a[t-1]=temp;
}
for(i=0;i<n;i++)
    b[i]=a[i];
t--;
}
for(i=0;i<n;i++)
  printf("%d,",a[i]);
}

搜索更多相关主题的帖子: include C语言 网上 
2016-03-02 20:41
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:20 
程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, j, p, t, k, temp, n = 10, max;
            int[] a = { 99, 45, 9, 75, 78, 42, 48, 66, 70, 17 };
            int[] b = new int[10];
            int[] c = new int[10];
            int[] d = new int[10];

            for (i = 0; i < n; i++)  c[i] = 0;
            for (i = 0; i < n; i++)  b[i] = a[i];

            t = n;

            while (t!=0)
            {
                i = p = t;
                k = 1;

                for (i = 0; i < t; i++)  d[i] = i;

                while (i!=0)
                {
                    i = i / 2;
                    k = 2 * k;
                }

                k = k / 2;
                while (k!=0)
                {
                    for (i = 0, j = p - 1; i < k; i++, j--)
                    {
                        if (b[i] > b[j])
                        {
                            c[i] = d[i];
                        }
                        else
                        {
                            c[i] = d[j];
                        }
                    }

                    for (j = 0; j < k; j++)
                    {
                        i = c[j];
                        b[j] = a[i];
                    }

                    for (j = 0; j < k; j++)  d[j] = c[j];

                    k = k / 2;
                    p = (p + 1) / 2;
                }

                max = c[0];

                if (a[max] > a[t-1])
                {
                    temp = a[max];
                    a[max] = a[t-1];
                    a[t-1] = temp;
                }

                for (i = 0; i < n; i++)  b[i] = a[i];

                t--;
            }

            for (i = 0; i < n; i++) Console.Write("{0},", a[i]);
            Console.ReadKey();
        }
    }
}


[此贴子已经被作者于2016-3-2 23:55编辑过]


   唯实惟新 至诚致志
2016-03-02 23:52
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2016-3-2
得分:0 
回复 2楼 qq1023569223
谢谢你了!
可能是源码的问题吧,小数据正确,大数据就错了。。。
请问你知道有啥排序方法快,又易懂的吗?
谢谢帮忙了!

[此贴子已经被作者于2016-3-3 02:17编辑过]

2016-03-03 02:08
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
回复 3楼 ppppooiiuu
你可以考虑C#自有的排序方法Array.Sort(),效率应该不会低。如果非要自己写的话,可以考虑快速排序和希尔排序。

   唯实惟新 至诚致志
2016-03-03 08:18
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2016-3-2
得分:0 
回复 4楼 qq1023569223
确实Array.Sort()的效率很高,但是他支持的是一维,我是希望二维也可以有这么高的效率,我有查到快速排序的方法,你可以帮我大约看一下正不正确吗,这个网站上有提到他有修改过,我也不定哪个方法比较适合。。。
或者可以列一个正确的快速排序给我吗?谢谢!
以下是我搜到的排序
http://www.
2016-03-03 16:59
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
没有改吧。我照原来的稍润色下,我运行试过可行。
程序代码:
#include <stdio.h>
#include <stdbool.h>
#define N 10

void Swap(int data[],int i,int j)
{
    int tmp;

    tmp=data[i];
    data[i]=data[j];
    data[j]=tmp;
}

void QuickSort(int data[], int low, int high)
{
    if (low >= high) return;

    int temp = data[low];
    int i = low + 1, j = high;

    while (true)
    {
        while (data[j] > temp) j--;
        while (data[i] < temp && i < j) i++;
        if (i >= j) break;
        Swap(data, i, j);
        i++;
        j--;
    }

    if (j != low)
    Swap(data, low, j);

    QuickSort(data, j + 1, high);
    QuickSort(data, low, j - 1);
}

int main()
{
    int a[N]={1,3,5,7,9,2,4,6,8,10},i;

    for(i=0;i<N;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");

    QuickSort(a,0,N-1);

    for(i=0;i<N;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");

    return 0;
}


[此贴子已经被作者于2016-3-3 18:51编辑过]


   唯实惟新 至诚致志
2016-03-03 17:26
ppppooiiuu
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2016-3-2
得分:0 
回复 6楼 qq1023569223
谢谢
2016-03-04 13:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462091-1-1.html




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

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