数组的排序的五种基本方法

 
package hhf.Sort_1012;
 
import java.util.Random;
 
/**
 * Maopao_Array
 * @author HHF
 * 2012-10-13 
 */
public class Sort {
 
static int n = 1;
/**
* @param args
*/
//主函数的编写 
//主函数内 我们应该尽量简洁,一般不提倡在主函数里定义方法,一般提倡在主函数里声明使用方法
public static void main(String[] args) {
// TODO Auto-generated method stub
 
//创建一个输入对象
java.util.Scanner sc = new java.util.Scanner(System.in);
while(true){
System.out.println("请输入你要选择的排序方法(输入下面排序方法的序号)\n " +
"1.冒泡排序\n" +
"2.选择排序\n" +
"3.插入排序\n" +
"4.shell排序\n");
//调用nextint的方法接收输入值
n = sc.nextInt();
 
//定义一个长度为十的int数组
int [] array = new int[6];
//初始化数组
init_array(array);
//打印数组
System.out.println("原始数组是:");
print_array(array);
//开始排序
System.out.println("正在排序中:");
 
switch(n){
case 1: maopao_array(array);
break;
case 2: xuanze_array(array);
break;
case 3: charu_array(array);
break;
case 4: shell_array(array);
break;
default: 
System.out.println("没有这个排序方法  —— 你,你怎么可以乱输入呢,,,?");
 
}
 
 
//打印数组
System.out.println("排序后的数组是:");
print_array(array);
System.out.println();
System.out.println();
System.out.println();
System.out.println();
 
}
}
/*
 * 初始化数组函数的实现
 */
public static void init_array(int [] array){
//一个循环 遍历数组元素赋值
for(int i = 0; i < array.length; i++){
//定义一个随机数对象,让它产生随机数赋值给数组元素
Random ran = new Random();
array[i] = ran.nextInt(101);
 
}
}
/*
 * 打印数组的函数实现
 */
public static void print_array(int [] array){
//一个for循环遍历数组元素 并一一打印出来(注意每个元素之间的间隔)
for(int i = 0; i < array.length; i++){
 
System.out.print(array[i]);
System.out.print("\t");
 
}
System.out.println();
 
}
/*
 * 冒泡排序函数实现
 */
public static void maopao_array(int [] array){
//两个循环保证每一个都平等的对待了
for(int i = 0; i < array.length; i++)
for(int j = i + 1; j < array.length; j++)
//交换值 的一个简单算法
if(array[i] > array[j]){
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
print_array(array);
}
//某些时候可以考虑在这个地方加上这么一句
//print_array(array);
 
}
 
public static void xuanze_array(int [] array){
//两个循环保证每一个都平等的对待了
for(int i = 0; i < array.length; i++){
int mix = i;
for(int j = i + 1; j < array.length; j++)
//交换值 的一个简单算法
if(array[mix] > array[j])
mix = j;
//此时得到的mix就是本次循环得到的最小值的下标
int temp = array[i];
array[i] = array[mix];
array[mix] = temp;
print_array(array);
 
}
}
public static void charu_array(int [] array){
//两个循环保证每一个都平等的对待了
for(int i = 1; i < array.length; i++)
for(int j = i; j > 0; j--)
//交换值 的一个简单算法
if(array[j] < array[j-1]){
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
print_array(array);
}
//某些时候可以考虑在这个地方加上这么一句
//print_array(array);
}
 
public static void shell_array(int [] array){
for( int increment = array.length / 2 ; increment > 0 ;increment /= 2 )
for(int i = increment; i < array.length; i++){
int temp = array[i];
int j = 0;
for(j = i; j >= increment; j-=increment)
if(temp < array[j-increment]){
array[j] = array[j - increment];
}else 
break;
array[j] = temp;
print_array(array);
}
//print_array(array);
 
}
}
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值