在学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. Apache shiro的简单介绍与使用(与spring整合使用)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  2. 想到一个赚钱的APP

    通过APP上发布调查问卷的需求,鼓励人们注册,并给与一定的报酬.需求主要面向一些调查问卷,一类的需求发布

  3. zoj3321 circle floyd 最小生成树

    Circle 断一个图是否是一个环. 思路:必有m==n,那么我们用n-1条边能够生成一棵树(即是所有点联通,则用floyd即可),然后看最后一条边的两个点是否是单边(度为一)即可 . #includ ...

  4. oracle基本查询语句总结

    spool E:\基本查询.txt 将命令行的语句写入到指定的目下的指定的文件中 host cls 清屏命令 show user 显示当前操作的用户 desc emp 查看表结构 select * f ...

  5. PPLB条码打印

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. JS中的作用域以及全局变量的问题

    一. JS中的作用域 1.全局变量:函数外声明的变量,称为全部变量 局部变量:函数内部使用var声明的变量,称为局部变量在JS中,只有函数作用域,没有块级作用域!!!也就是说,if/for等有{}的结 ...

  7. MSDN-9月杂志推荐

    序言:MSDN Magazine频道每月都会推出杂志,提供给广大开发者免费阅读,文章的作者往往都是国内外技术大牛.而且翻译良好(机器翻译除外)排班工整,是技术进阶的绝美助力! 本系列文章会关注MSDN ...

  8. STM32F10x -- 利用IIC协议操作AT24C02

    关于AT24C02芯片的一些参数性能可参考其他的一些相关资料.此处只贴出程序. 宏文件AT24CXX.h #ifndef _AT24CXX_H_ #define _AT24CXX_H_ #includ ...

  9. MVVM模式下 DataTemplate 中控件的绑定

    今天给ListBox中通过DataTemplate生成的Button绑定命令时,一开始Button始终找不到绑定的命令.现找到了正确的绑定方式,特来记录一下. 先上个正确的示例: <ListBo ...

  10. Java boolean类型

    有关java boolean类型的定义: The boolean data type has only two possible values: true and false. Use this da ...