在学java泛型,于是把排序拿来练练手了

import java.util.Arrays;

public class GenericArraySort {
public static void main(String[] args){ Integer[] integers = getGenericArray(2,41,12,3);
bubbleSort(integers);
System.out.println("integer:");
System.out.println(Arrays.toString(integers)); Long[] longs = getGenericArray(123L, 22L,12L, 3L);
selectSort(longs);
System.out.println("long:");
System.out.println(Arrays.toString(longs)); Float[] floats = getGenericArray(3.2f,2.4f,1.5f, 22.2f);
insertSort(floats);
System.out.println("float:");
System.out.println(Arrays.toString(floats)); Double[] doubles = getGenericArray(5.2,2.4,1.5,22.2);
mergeSort(doubles);
System.out.println("double:");
System.out.println(Arrays.toString(doubles));
} /**
* 比较2个数字的大小
* @param a
* @param b
* @return
*/
public static boolean compareNumberVal(Number a, Number b){
boolean ret = false; if(a instanceof Integer){
if(a.intValue() > b.intValue()){
ret = true;
}
}else if(a instanceof Long){
if(a.longValue() > b.longValue()){
ret = true;
}
}else if(a instanceof Float){
if(a.floatValue() > b.floatValue()){
ret = true;
}
}else if(a instanceof Double){
if(a.doubleValue() > b.doubleValue()){
ret = true;
}
}else if(a instanceof Byte){
if(a.byteValue() > b.byteValue()){
ret = true;
}
}else if(a instanceof Short){
if(a.shortValue() > b.shortValue()){
ret = true;
}
}
return ret;
} /**
* 交换整型数组 i 和 j 的value
* @param i
* @param j
* @param param
* @param <T>
*/
public static <T extends Number> void exchangeKey(int i, int j, T param[]){
T tmp = param[i];
param[i] = param[j];
param[j] = tmp;
} /**
* 冒泡排序
* @param param
* @param <T>
*/
public static <T extends Number> void bubbleSort(T param[]){
int len = param.length;
for(int i = 1; i < len ; i++){
for(int j = len - 1; j >= i; j--){
//一一对比, 逐个替换
if(compareNumberVal(param[j - 1], param[j])){
exchangeKey(j - 1, j, param);
}
}
}
} /**
* 快速选择排序
* @param param
* @param <T>
*/
public static <T extends Number> void selectSort(T param[]){
int len = param.length;
for(int i = 0; i < len ; i++){
T min = param[i];
int minIndex = i;
int oi = i;
for(int j = len - 1; j >= i; j--){
//一一对比, 取得最小的key 再替换
if(compareNumberVal(min, param[j])){
min = param[j];
minIndex = j;
}
}
if(minIndex != oi){
exchangeKey(i, minIndex, param);
}
}
} /**
* 插入排序
* @param param
* @param <T>
*/
public static <T extends Number> void insertSort(T param[]){
int len = param.length;
for(int i = 1; i < len ; i++){
int j = i;
T tmp = param[j]; //存临时变量 //逐个向后比较 假如大于 则往后移
while(j > 0 && compareNumberVal(param[j - 1], tmp)){
param[j] = param[j - 1];
j--;
}
param[j] = tmp;
}
} public static <T extends Number> void mergeSort(T param[]){
mergeProcess(param, 0, param.length - 1);
} /**
* 递归处理归并排序
* @param param
* @param l
* @param r
* @param <T>
*/
public static <T extends Number> void mergeProcess(T param[], int l, int r){ if(l >= r){
return;
}
int mid = (l + r) / 2; //中间位置 把数组切分为2段
mergeProcess(param, l , mid );
mergeProcess(param, mid + 1 , r );
merge(param, l , r);
}
/**
* 合并排序好的数组段
* @param param
* @param l
* @param r
* @param <T>
*/
public static <T extends Number> void merge(T param[], int l, int r){ int mid = (l + r) / 2; //中间位置 把数组切分为2段
int rs = mid + 1; //右侧数组起始key 左 0 - mid 右 rs - r
int cs = l; //临时排序数组的起始key(和原数组 l相同)
int s = l; //备份原数组起始key
Number[] tmpArr = new Number[param.length]; //临时排序数组 //重新排序 2个数组取最前面key 比较大小 放到 临时数组
while(l <= mid && rs <= r){
if(compareNumberVal(param[l], param[rs])){
tmpArr[cs++] = param[rs++];
}else{
tmpArr[cs++] = param[l++];
}
} //左侧 剩余部分 拷贝 临时数组
while (l <= mid){
tmpArr[cs++] = param[l++];
} //右侧 剩余部分拷贝临时数组
while (rs <= r){
tmpArr[cs++] = param[rs++];
} //临时排序好的数组重新拷贝回 param
while(s <= r){
param[s] = (T)tmpArr[s++];
}
}
/**
* 通过参数获取泛型数组
* @param arg
* @param <T>
* @return
*/
public static <T> T[] getGenericArray(T ... arg){
return arg;
} /**
* 打印泛型数组
* @param a
* @param <T>
*/
public static <T> void showArr(T a[]){
int len = a.length;
for (int i = 0; i < len; i++){
System.out.println(a[i]);
}
}
}

  

java 整型数组基本排序,冒泡,快速选择,插入,归并的更多相关文章

  1. Java整型数组的最大长度到底有多长?

    Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...

  2. [C][代码实例]整型数组二分排序

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  3. Java 整型数组只有一个整数是只出现一次的,其余都出现两次

    package writtenExamination; /** * @author lindaZ * @date 2015年10月22日 * @todo 找出数组中仅出现一次的数,其余数字出现两次 * ...

  4. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  5. Android jni 编程4(对基本类型二维整型数组的操作)

    Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...

  6. Android jni 编程3(对基本类型一维整型数组的操作)总结版

    主要学习资料:黑马程序员的NDK方法使用(生产类库so)              jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...

  7. Android jni 编程2(对基本类型一维整型数组的操作)

    参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...

  8. 实验12:Problem H: 整型数组运算符重载

    Home Web Board ProblemSet Standing Status Statistics   Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...

  9. c# 计算一个整型数组的平均

    一个整型数组的平均: class Program { static void Main(string[] args) { ,,,,,,,,,}; double avg= GetAvg(array); ...

随机推荐

  1. php Socket通信

    <?php error_reporting(0); $host = "0.0.0.0"; $port = 1082; $maxUser = 10; set_time_limi ...

  2. Spring读书笔记——bean加载

    我们的日常开发几乎离不开Spring,他为我们的开发带来了很大的便捷,那么Spring框架是如何做到方便他人的呢.今天就来说说bean如何被加载加载. 我们在xml文件中写过太多类似这样的bean声明 ...

  3. bootstrap 轮播模板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. EasyUI Dialog 窗体 布局记要

    通常在窗体里放置的都是表单,或者使用分栏(Tab)来陈列信息也是非常的好用.在这里特别记录一下在窗体里同时放置表单和表格的设计思路. 仅放置一个表单 通常 Dialog 里只放一个表单,而且表单的行数 ...

  5. ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理

    ASP.NET MVC的路由是MVC应用的一个核心也是MVC应用处理的入口,作为一个开发者,在正常情况下仅仅需要做的就是根据需求去定义实体.业务逻辑,然后在MVC的Controller中去调用.Vie ...

  6. typescript 的 polyfill 学习

    我们知道typescript 是ES 超集.这意味着,不仅仅ES 的各种语法特性都会包括,还能保证通过typescript的编译服务可以很方便的转成ES向下兼容的版本,这得意于typescript强大 ...

  7. RichEditBox 使用自定义菜单

    老周:当RichEditBox控件的上下文菜单即将弹出时,会引发ContextMenuOpening事件,我们需要处理该事件,并且将e.Handled属性设置为true,这样才能阻止默认上下文菜单的弹 ...

  8. php环境搭建工具推荐

    楼楼最近由于一系列原因,使用了几款php环境搭建工具,安装配置方便,所以在这里推荐一下.第一款是XAMPP(网址http://www.xampps.com/),软件包原来的名字是 LAMPP,但是为了 ...

  9. ajax 轮询 和 php长连接

     只看加粗的字体 js   部分       1:  ajax 成功回调函数中 一定要用时间函数间隔调用  get_comment(). get_comments('init'); function ...

  10. Yii2之ListView小部件

    ListView是yii框架中类似GridView,也是用于展示多条数据的小部件,相比GridView,ListView可以更加灵活地设置数据展示的格式. 下面以我自己做的一个使用ListView来展 ...