java 并行快速排序,Java中的并行性。分而治之,快速排序

here,

所以我不想重复我的错误。

我发现article说如何在分治算法中实现并行性。

多线程是使用Parallel.Invoke方法实现的。

所以问题是如何在Java中实现这种语法,并优化线程与CPU的协同工作

Parallel.Invoke(

() => QuickSortInternal(array, left, last - 1),

() => QuickSortInternal(array, last + 1, right)

);在这里我有样品在C#

public static void QuickSort(T[] array) where T : IComparable

{

QuickSortInternal(array, 0, array.Length - 1);

}

private static void QuickSortInternal(T[] array, int left, int right)

where T : IComparable

{

if (left >= right)

{

return;

}

SwapElements(array, left, (left + right) / 2);

int last = left;

for (int current = left + 1; current <= right; ++current)

{

if (array[current].CompareTo(array[left]) < 0)

{

++last;

SwapElements(array, last, current);

}

}

SwapElements(array, left, last);

Parallel.Invoke(

() => QuickSortInternal(array, left, last - 1),

() => QuickSortInternal(array, last + 1, right)

);

}

static void SwapElements(T[] array, int i, int j)

{

T temp = array[i];

array[i] = array[j];

array[j] = temp;

}和Java

static void quickSort(int numbers[], int array_size)

{

q_sort(numbers, 0, array_size - 1);

}

static void q_sort(int numbers[], int left, int right)

{

int pivot, l_hold, r_hold;

l_hold = left; // левая точка left point

r_hold = right; // правая точка right point

pivot = numbers[left]; //средняя самая левая

while (left < right) // пока левая меньше правой

{

while ((numbers[right] >= pivot) && (left < right)) // пока правый элемент больше среднего и левый меньше правого

right--; // правый уменьшаем

if (left != right) // пока левый не равен правому

{

numbers[left] = numbers[right];// правый присвамваем левому

left++;// левый наращиваем

}

while ((numbers[left] <= pivot) && (left < right))//

left++;

if (left != right)

{

numbers[right] = numbers[left];

right--;

}

}

numbers[left] = pivot;

pivot = left;

left = l_hold;

right = r_hold;

if (left < pivot)

q_sort(numbers, left, pivot-1);

if (right > pivot)

q_sort(numbers, pivot+1, right);

}

public static void main(String[] args) {

int m[]={4,6,2,6,34,6,32,43,2,6,76};

for (int i = 0; i < m.length; i++) {

System.out.print(m[i] +" ");

}

System.out.println("");

quickSort(m,m.length);

for (int i = 0; i < m.length; i++) {

System.out.print(m[i]+" ");

}

System.out.println("");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值