黑马程序员技术交流社区
标题:
冒泡排序和选择排序的代码体现
[打印本页]
作者:
小棽
时间:
2015-1-21 19:06
标题:
冒泡排序和选择排序的代码体现
public class Sort {
public static void main(String[] args) {
bubbleSort();
System.out.println("--------------------");
selectSort();
}
//冒泡排序
public static void bubbleSort(){
int[] arr = {49,56,12,87,30,25,14}; //定义一个未排序的数组
System.out.print("进行未排序前的遍历:");
printArray(arr); //遍历数组
System.out.println();
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length - 1 - i; j++){//没排序完一次,最大的就在最后面,所以不需要再比较,每次就少比较i次
if(arr[j] > arr[j+1]){ //如果前面一个元素比后面一个元素大,就交换位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.print("第"+(i+1)+"次的结果为:");
printArray(arr); //遍历每一次排序的结果
System.out.println();
}
}
//选择排序
public static void selectSort(){
int[] arr = {49,56,12,87,30,25,14};
System.out.print("进行未排序前的遍历:");
printArray(arr); //遍历数组
System.out.println();
for(int i = 0; i < arr.length; i++){
for(int j = i+1; j < arr.length; j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.print("第"+(i+1)+"次的结果为:");
printArray(arr); //遍历每一次排序的结果
System.out.println();
}
}
//打印数组
public static void printArray(int[] arr){
System.out.print("["+arr[0]+",");
for(int i = 1; i < arr.length; i++){
if( i != arr.length - 1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]+"]");
}
}
}
}
复制代码
作者:
huyang936
时间:
2015-1-21 21:26
看看 呵呵
作者:
qq306149769
时间:
2015-1-21 21:40
如果能调试,我能写出来,但是如果让我用笔直接写,我估计就完蛋了!
作者:
寻觅
时间:
2015-1-21 21:59
还可以再优化优化!
作者:
小棽
时间:
2015-1-22 16:21
寻觅 发表于 2015-1-21 21:59
还可以再优化优化!
怎么优化,是把置换代码提取出来吗?
作者:
秦文强
时间:
2015-1-22 20:43
这道题很经典
作者:
da_chuan
时间:
2015-1-22 23:37
楼主其实还可以写一个插入排序的
作者:
以利亚
时间:
2015-1-23 09:40
面试题中会考这个吗?
作者:
周景新
时间:
2015-1-23 12:47
来看下。。。。
作者:
Afridoce
时间:
2015-1-23 14:23
奋斗吧骚年!!!
作者:
默默地回忆
时间:
2015-1-23 21:51
努力学习,奔向就业班
作者:
Mr.JUN
时间:
2015-1-23 21:58
小棽 发表于 2015-1-22 16:21
怎么优化,是把置换代码提取出来吗?
你的冒泡排序,那我就插入排序
//描述插入排序
public class InsertSort {
public static void main(String[] args) {
int maxSize = 100;
ArrayInsert arr = new ArrayInsert(maxSize);
/*for (int i=9; i>0; i--) {
arr.insert(i);
}*/
//插入100个0-100的随机数
for (int i=0; i<maxSize; i++) {
long n = (long) (Math.random()*(maxSize)+1);
arr.insert(n);
}
long start = System.currentTimeMillis();
System.out.println("排序前的数据: ");
arr.display();
arr.insertSort();
System.out.println("排序后的数据: ");
arr.display();
long end = System.currentTimeMillis();
System.out.println("spend time: " + (end-start)); //花费的时间
}
}
//封装数据的类
class ArrayInsert {
private long[] arr;
private int nElems;
public ArrayInsert(int size) {
arr = new long[size];
nElems = 0;
}
//插入数据
public void insert(int value) {
arr[nElems] = value;
nElems ++;
}
public void display() {
for (int i=0; i<nElems; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
//插入排序
public void insertSort() {
int in, out;
for (out=1; out<nElems; out++) {
long temp = arr[out];
in = out;
while(in>0 && arr[in-1]>temp) {
arr[in] = arr[in-1]; //右移一位
in --;
}
arr[in] = temp; //插入数据
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2