求对10000个数的快速排序的代码(c#控制台应用程序)

2024-12-25 07:44:09
推荐回答(4个)
回答1:

JAVA代码,不过几乎都是同用的了,也没用到JAVA的什么东西
自己改下随机产生的数,这是递归的快排,100W排不了,要用堆栈来实现快排才行
public static void main(String[] args)
{
int[] elements = new int[10];
for(int i = 0; i < elements.length; i++)
{
elements[i] = (int)(Math.random() * 20);
System.out.print(elements[i] + " ");
}

quick(elements);

display(elements);
}

public static void quick(int[] elements)
{
start(elements,0,elements.length - 1);
}

/**
* 排序
* @param elements
* @param left
* @param right
*/
public static void start(int[] elements, int left, int right)
{
if(left < right)
{
//返回支点的位置
int position = partition(elements, left, right);
//递归计算左边的子集
start(elements, left, position - 1);
//递归计算右边的子集
start(elements, position + 1, right);
}
return ;
}

/**
* 作分半处理,把小于支点的数放到左边,大于支点的数放到右边
* @param elements
* @param left
* @param right
* @return
*/
public static int partition(int[] elements, int left, int right)
{
int position = elements[left];
while(left < right)//当left >= right时则分半结束
{
/*从右边开始和支点比较,如果大于等于支点就减1个下标值
* 当发现小于支点的数时才退出循环
*/
while(elements[right] >= position && left < right)
{
count++;//累加,计算排完序用了多少次循环
right--;
}
if(left < right)//如果成立,证明有发现小于支点的数
{
elements[left] = elements[right];
left++;
}

//开始从左边和支点比较
while(elements[left] <= position && left < right)
{
count++;
left++;
}
if(left < right)
{
elements[right] = elements[left];
right--;
}
}
//全部比较完后,再把支点放到left和right重合的位置
elements[left] = position;
return left;
}

要么递归,要么堆栈了我

回答2:

random ran=new random();
int [] nums=new int[1000];
for(int i=0;i<1000;i++)
{
nums[i]=ran.next(1000);
}
//上面是随机赋值,下面是排序
for(int j=0;j<999;j++)
{
for(int k=j+1;k<1000;k++)
{
if (nums[j]>nums[k])
{
nums[j]=nums[j]+nums[k];
nums[k]=nums[j]-nums[k];
nums[j]=nums[j]-nums[k];
}
}
}

回答3:

(*^__^*) 嘻嘻……
我同意一楼的
我的思路是
循环生成10000个数然后放入array[]数组
sort方法排序
然后输出
二楼用递归算法我估计效率太低

回答4:

使用random对象生成随机数字,放在排序表sorted list里,是最快的啦!