java打擂台排序_java 实现排序

packagecom.cjs.alogrithm;/*** 此类采用泛型方法来提供对各种类型数据的各种排序算法

*

*@authorS

*@version1.0*/

public classMySort {/*** 冒泡排序来实现一系列数据的升序排列,改变了传入的数组

*

*@parama

* 传入的存储数据的数组,对其进行排序的目标数组

*@returnvoid*/

public static > voidbubbleSort(T a[]) {int n =a.length;for (int i = 1; i <= n - 1; i++) {for (int j = 0; j < n - i; j++) {if ((a[j]).compareTo(a[j + 1]) > 0) {

T t=a[j];

a[j]= a[j + 1];

a[j+ 1] =t;

}

}

}

}/*** 选择排序来实现一系列数据的升序排列,改变了传入的数组

*

*@parama

* 传入的存储数据数组,对其进行排序的目标数组

*@returnvoid*/

public static > voidselectSort(T[] a) {int n =a.length;for (int i = 0; i < n; i++) {

T x=a[i];int k =i;for (int j = i + 1; j < n; j++) {if (a[j].compareTo(x) < 0) {

x=a[j];

k=j;

}

}

a[k]=a[i];

a[i]=x;

}

}/*** 插入排序来实现一系列数据的升序排列,改变了传入的数组

*

*@parama

* 传入的存储数据的数组,对其进行排序的目标数组

*@returnvoid*/

public static > voidinsertSort(T[] a) {int n =a.length;for (int i = 1; i < n; i++) {

T x=a[i];int k =i;for (int j = i - 1; j >= 0; j--) {if (a[j].compareTo(x) > 0) {

a[j+ 1] =a[j];

k=j;

}

}

a[k]=x;

}

}/*** 归并排序来实现一系列数据的升序排列,改变了传入的数组,需要额外提供一个临时数组来辅助排序

*

*@parama

* 传入的存储数据的数组,对其进行排序的目标数组

*@paramleft

* 传入数组的左边界下标

*@paramright

* 传入数组的右边界下标

*@returnvoid*/

public static > voidmergeSort(T a[], T temp[],int left, intright) {//至少有两个元素,也是递归的结束条件

if (left

mergeSort(a, temp, left, mid);

mergeSort(a, temp, mid+ 1, right);//合并到临时数组temp

Merge(a, temp, left, mid, right);//复制回数组a

Copy(a, temp, left, right);

}

}/*** 归并排序中的合并操作,将二分后的数组按升序排列

*

*@parama

* 传入的数组

*@paramt

* 要合并到的临时数组

*@paramleft

* 传入数组的左边界下标

*@parammid

* 传入数组的中间下标

*@paramright

* 传入数组的右边界下标

*@returnvoid*/

private static > void Merge(T a[], T t[], intleft,int mid, intright) {//合并c[1:m]和c[m+1:r]到d[l,r]

int i = left, j = mid + 1, k =left;//两表中元素比较,类似于打擂台,大的复制到临时数组中

while (i <= mid && j <=right) {if (a[i].compareTo(a[j]) < 0) {

t[k++] = a[i++];

}else{

t[k++] = a[j++];

}

}//若前一个子序列剩余,则直接复制入临时数组

if (i >mid) {for (int q = j; q <= right; q++)

t[k++] =a[q];

}//后一个子序列

else{for (int q = i; q <= mid; q++)

t[k++] =a[q];

}

}/*** 归并排序中的复制操作,将数据从临时数组中复制到传入的原数组

*

*@parama

* 传入的数组

*@paramt

* 保存数据的临时数组

*@paramleft

* 传入数组的左边界下标

*@paramright

* 传入数组的右边界下标

*@returnvoid*/

private static > void Copy(T a[], T t[], intleft,intright) {for (int i = left; i <= right; i++)

a[i]=t[i];

}/*** 快速排序来实现一系列数据的升序排列,改变了传入的数组

*

*@parama

* 传入的存储数据的数组,对其进行排序的目标数组

*@paramleft

* 传入数组的左边界下标

*@paramright

* 传入数组的右边界下标

*@returnvoid*/

public static > void quickSort(T a[], intleft,intright) {if (left

quickSort(a, left, x- 1);

quickSort(a, x+ 1, right);

}

}/*** 快速排序中用来对元素进行划分,基准元素为a[left]

*

*@parama

* 传入的存储数据的数组,对其进行排序的目标数组

*@paramleft

* 传入数组的左边界下标

*@paramright

* 传入数组的右边界下标

*@returni 划分后基准元素所处位置的下标*/

private static > int Partition(T[] a, intleft,intright) {

T x=a[left];int i = left, j =right;while (i = 0)

j--;if (i

a[i]=a[j];

i++;

}while (i < j && a[i].compareTo(x) < 0)

i++;if (i

a[j]=a[i];

j--;

}

}

a[i]=x;returni;

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值