黑马程序员技术交流社区
标题:
排序算法之冒泡、插入和选择
[打印本页]
作者:
major2015
时间:
2015-4-9 12:36
标题:
排序算法之冒泡、插入和选择
最近学习了几个基本的算法,特贴在这里一起分享哈
public class Sort {
public static void main(String[] args) {
//调用自定制方法生成int[]
int[] src=getIntegerArray(20);
for(int i:src){
System.out.print(i+" ");
}
System.out.println();
long startTime=System.nanoTime();
bubbleSort(src);
long endTime=System.nanoTime();
System.out.println("bubbleSort used time:"+(endTime-startTime));
long startTime1=System.nanoTime();
selectionSort(src);
long endTime1=System.nanoTime();
System.out.println("selectionsort used time:"+(endTime1-startTime1));
long startTime2=System.nanoTime();
insertionSort(src);
long endTime2=System.nanoTime();
System.out.println("insertionSort used time:"+(endTime2-startTime2));
//打印排序后数组
for(int i:src){
System.out.print(i+" ");
}
}
public static int[] bubbleSort(int[] src){
if(src==null||src.length==0)
return null;
int out,in;
for(out=src.length-1;out>0;out--){
for(in=0;in<out;in++){
if(src[in]>src[in+1]){
int temp=src[in];
src[in]=src[in+1];
src[in+1]=temp;
}
}
}
return src;
}
public static int[] selectionSort(int[] src){
if(src==null||src.length==0)
return null;
int out,in,min;
for(out=0;out<src.length-1;out++){
min=out;
for(in=out+1;in<src.length;in++){
if(src[in]<src[min]){
min=in;
}
int temp=src[out];
src[out]=src[min];
src[min]=temp;
}
}
return src;
}
public static int[] insertionSort(int[] src){//最快
if(src==null||src.length==0)
return null;
int out,in;
for(out=1;out<src.length;out++){
int temp=src[out];
in=out;
while(in>0&&src[in-1]>temp){
src[in]=src[in-1];
in--;
}
/* for (; in > 0; in--) { // 用时更少
if (src[in - 1] > temp) {
src[in] = src[in - 1];
} else {
break;
}
}*/
src[in]=temp;
}
return src;
}
//生成随机int[]供测试用
public static int[] getIntegerArray(int n){
if(n<=0)
return null;
int[] src=new int[n];
int index=0;
while(index<n){
src[index]=(int)(Math.random()*100);
index++;
}
return src;
}
}
复制代码
作者:
感觉
时间:
2015-4-9 12:38
希望楼主写一下思路和注释
作者:
cat73
时间:
2015-5-3 10:00
本帖最后由 cat73 于 2015-5-3 10:10 编辑
说实话 楼主这代码风格不是很好- -
该留空格的地方不留空格
该有注释的地方没有注释提出一些改进意见
1.永远不要省略if for之类函数里的大括号
2.该留空格的地方要留空格 比如等于号两边
3.不相关的两段代码要用空行隔开 最好能分开两个函数
以及,其实我个人是从来不用IDE的自动代码整理的,时间长了自己就习惯了,自然而然的就写出来符合规范的代码格式了。
现在我写任何语言的代码,几乎都是照那一份格式来,这样的好处就是,我出门平板上只有个Sublime Text(一种记事本),照样可以写各种语言的代码,而不用一个语言一个IDE。
作者:
cat73
时间:
2015-5-3 10:14
public class Sort {
/**
* main方法 程序从这里启动
* @param args 从外部传入的参数列表
*/
public static void main(String[] args) {
//生成要排序的数组
int[] src = getIntegerArray(20);
//输出下要排序的数组
for(int i : src){
System.out.print(i + "\t");
}
System.out.println();
//冒泡排序
long startTime = System.nanoTime();
bubbleSort(src);
long endTime = System.nanoTime();
System.out.println("bubbleSort used time:" + (endTime - startTime));
//选择排序
long startTime1 = System.nanoTime();
selectionSort(src);
long endTime1 = System.nanoTime();
System.out.println("selectionsort used time:" + (endTime1 - startTime1));
//插入排序
long startTime2 = System.nanoTime();
insertionSort(src);
long endTime2 = System.nanoTime();
System.out.println("insertionSort used time:" + (endTime2 - startTime2));
//输出下排序后数组
for(int i : src){
System.out.print(i+"\t");
}
}
/**
* 冒泡排序
* @param src 要被排序的数字数组
* @return 排序后的数字数组
*/
public static int[] bubbleSort(int[] src) {
if(src == null || src.length == 0) {
return null;
}
int out, in;
for(out = src.length - 1; out > 0; out--) {
for(in = 0; in < out; in++) {
if(src[in] > src[in + 1]) {
int temp = src[in];
src[in] = src[in + 1];
src[in + 1] = temp;
}
}
}
return src;
}
/**
* 选择排序
* @param src 要被排序的数字数组
* @return 排序后的数字数组
*/
public static int[] selectionSort(int[] src) {
if(src == null || src.length == 0) {
return null;
}
int out, in, min;
for(out = 0; out < src.length - 1; out++) {
min = out;
for(in = out + 1; in < src.length; in++) {
if(src[in] < src[min]) {
min = in;
}
int temp = src[out];
src[out] = src[min];
src[min] = temp;
}
}
return src;
}
/**
* 插入排序
* @param src 要被排序的数字数组
* @return 排序后的数字数组
*/
public static int[] insertionSort(int[] src) { //最快
if(src == null || src.length == 0) {
return null;
}
int out,in;
for(out = 1; out < src.length; out++) {
int temp = src[out];
in = out;
while(in > 0 && src[in - 1] > temp) {
src[in] = src[in - 1];
in--;
}
/*
for (; in > 0; in--) { // 用时更少
if (src[in - 1] > temp) {
src[in] = src[in - 1];
} else {
break;
}
}
*/
src[in] = temp;
}
return src;
}
/**
* 随机生成一些整数并以数组形式返回, 供测试排序函数用
* @param n 要生成的整数数量
* @return 一些随机大小的整数的数组
*/
public static int[] getIntegerArray(int n) {
if(n <= 0) {
return null;
}
int[] src = new int[n];
int index = 0;
while(index < n){
src[index] = (int)(Math.random() * 100);
index++;
}
return src;
}
}
复制代码
经过人工简单整理后的代码
作者:
清香白莲
时间:
2015-5-3 10:20
cat73同学已然培养了良好的编程习惯
作者:
呆呆呆呆孔
时间:
2015-5-3 10:24
注释好少,不过大赞一下啊
作者:
苟苟
时间:
2015-5-3 10:28
3kx share
作者:
弯曲/mg抛物☀
时间:
2015-5-3 14:13
写的很规范了,方便调用。
作者:
铃铃铃铃铃锋
时间:
2015-5-3 15:07
学习了~
作者:
bboyXiaoNuo
时间:
2015-5-3 15:37
有心人,nice,赞一个
作者:
江万锋
时间:
2015-5-3 16:03
路过一下..不过看懂了
作者:
yelebron
时间:
2015-5-3 16:58
加注释!!!!!!!!!!!!!!!!!
作者:
支离疏者
时间:
2015-5-3 17:08
那个,代码是怎么贴的??
作者:
lixunwen
时间:
2015-5-3 17:41
非常不错!
作者:
南方小道士
时间:
2015-5-3 17:50
建议做好注释
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2