高人请进,递归算法问题

AuC 2009-03-29 09:06:14
对4个数进行排序 实现不同的排法?

...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AuC 2009-03-29
  • 打赏
  • 举报
回复
最主要的是都用了递归的思想
AuC 2009-03-29
  • 打赏
  • 举报
回复
1楼和3楼的都不错
zzxap 2009-03-29
  • 打赏
  • 举报
回复
[code=C#]
//希尔排序
public class ShellSorter
{
public void Sort(int[] arr)
{
int inc;
for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;
for (; inc > 0; inc /= 3)
{
for (int i = inc + 1; i <= arr.Length; i += inc)
{
int t = arr[i - 1];
int j = i;
while ((j > inc) && (arr[j - inc - 1] > t))
{
arr[j - 1] = arr[j - inc - 1];//交换数据
j -= inc;
}
arr[j - 1] = t;
}
}
}

static void Main(string[] args)
{
int[] array = new int[] {34, 75, 33, 47 };
ShellSorter s = new ShellSorter();
s.Sort(array);
foreach (int m in array)
Console.WriteLine("{0}", m);

}
}

[/CODE]
zzxap 2009-03-29
  • 打赏
  • 举报
回复
最简单的array.sort()
zzxap 2009-03-29
  • 打赏
  • 举报
回复
[code=C#]

//快速排序
class QuickSorter
{
private void swap(ref int l, ref int r)
{
int temp;
temp = l;
l = r;
r = temp;
}
public void Sort(int[] list, int low, int high)
{
int pivot;//存储分支点
int l, r;
int mid;
if (high <= low)
return;
else if (high == low + 1)
{
if (list[low] > list[high])
swap(ref list[low], ref list[high]);
return;
}
mid = (low + high) >> 1;
pivot = list[mid];
swap(ref list[low], ref list[mid]);
l = low + 1;
r = high;
do
{
while (l <= r && list[l] < pivot)
l++;
while (list[r] >= pivot)
r--;
if (l < r)
swap(ref list[l], ref list[r]);
} while (l < r);
list[low] = list[r];
list[r] = pivot;
if (low + 1 < r)
Sort(list, low, r - 1);
if (r + 1 < high)
Sort(list, r + 1, high);
}



static void Main(string[] args)
{
int[] iArrary = new int[] {34, 75, 33, 47 };
QuickSorter q = new QuickSorter();
q.Sort(iArrary, 0, 13);
for (int m = 0; m <= 13; m++)
Console.WriteLine("{0}", iArrary[m]);
}
}
[/CODE]
cppfaq 2009-03-29
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace perm
{
internal class Program
{
private static void permlist(int[] listdata, int k, int m)
{
if (k == m)


{
for (int i = 0; i <= m; i++) System.Console.Write(listdata[i]);
Console.WriteLine();
}
else
for (int i = k; i <= m; i++)


{
Swap(ref listdata[k], ref listdata[i]);
permlist(listdata, k + 1, m);
Swap(ref listdata[k], ref listdata[i]);
}
}


private static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}

private static void Main(string[] args)
{
int[] listdata = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
permlist(listdata, 0, 3);
Console.ReadLine();
}
}
}
tabbycat 2009-03-29
  • 打赏
  • 举报
回复
List<T>提供Sort方法的
有个委托的重载,可以使用自定义排序规则
liu4545533 2009-03-29
  • 打赏
  • 举报
回复
我使用java实现的 算法出来了 改成.net也简单啦


package com.list;

import java.util.ArrayList;

public class ListAll {
public static void main(String[] args)
{
ArrayList str=new ArrayList();
str.add("a");
str.add("b");
str.add("c");
// str.add("d");
// str.add("e");
for(int i=0;i<str.size();i++)
{
System.out.print(str.get(i).toString()+",");
}
System.out.println("的排列为:");
ListAll all=new ListAll();
ArrayList str1=all.getArry(str);
for(int i=0;i<str1.size();i++)
{
System.out.println(str1.get(i).toString());
}

}
ArrayList getArry(ArrayList str)
{
if(str.size()==1)
{
return str;
}
else
{
ArrayList result=new ArrayList();
String temp= str.get(0).toString();
//String[] temp1=new String[str.length-1];
ArrayList temp1=new ArrayList();
for(int i=1;i<str.size();i++)
{
temp1.add(str.get(i));
}
ArrayList temp2=getArry(temp1);
for(int i=0;i<temp2.size();i++)
{
int index=temp2.get(i).toString().indexOf(temp);
if(index==-1)
{
for(int j=0;j<=temp2.get(i).toString().length();j++)
{
StringBuffer s=new StringBuffer((temp2.get(i)).toString());
String ss=s.insert(j, temp).toString();
result.add(ss);
}
}
}
return result;
}
}
}


62,042

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧