您的位置:首页 > 编程语言 > Java开发

JAVA学习代码——数组排序

2016-08-12 21:30 155 查看
排序算法:Paixusuanfa.java

package 数组_排序;

//数组的几种排序算法的实现
public class Paixusuanfa {
/*选择法排序: 假定有n个数的序列,要求按递增次序排序,算法步骤:
(1)从n个数中选出最小数的下标,将最小数与第一个数交换位置;
(2)除第一个数外,其余n-1个数再按方法(1)选出次小的数,与第二个数交换位置;
(3)以此类推,最终构成递增序列。 由此可见,数组排序要用两重循环才能实现,内循环选择最小数,
找到该数在数组中的排列位置;执行n-1次外循环,使n个数都确定了在数组中的排序位置。*/
public int[] choiceSort(int[] arr){
for(int i = 0;i < arr.length;i++){
int m = i;
for(int j = i + 1;j < arr.length;j++){
//如果第j个元素比第m个元素小,将j赋值给m
if(arr[j] < arr[m]){
m = j;
}
}
//交换m和i两个元素的位置
if(i != m){
int t = arr[i];
arr[i] = arr[m];
arr[m] = t;
}
}
return arr;
}
/*冒泡排序法:冒泡法排序与选择法排序类似,选择法排序在每一轮排序时找最小数或最大数的下标,
出了内循环再交换最小数的位置,而冒泡法排序时将相邻数比较,次序不对就交换位置,出了内循环
最小数或最大数已冒出*/
public int[] insertSort(int[] arr){
for(int i = 1;i < arr.length;i++){
int temp = arr[i];
int j = i - 1;
while(temp < arr[j]){
arr[j+1] = arr[j];
j--;
if(j == -1){
break;
}
}
arr[j+1] = temp;
}
return arr;
}
// 插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。
/*public int[] insertSort(int[] arr){
for(int i = 1;i < arr.length;i++){
int temp = arr[i];
int j = i - 1;
while(temp < arr[j]){
arr[j+1] = arr[j];
j--;
if(j == -1){
break;
}
}
arr[j+1] = temp;
}
return arr;
} */
/*快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组
的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。*/
public int[] fastSort(int[] arr,int left,int right){
if(left < right){
int s = arr[left];
int i = left;
int j = right + 1;
while(true){
//向右找大于s的元素的索引
while(i+1 < arr.length && arr[++i] < s);
//向左找小于s的元素的索引
while(j-1 > -1 && arr[--j] > s);
//如果i >= j 推出循环
if(i >= j){
break;
}else{
//教化i和j位置的元素
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[j];
arr[j] = s;
//对左面进行递归
fastSort(arr,left,j-1);
//对右面进行递归
fastSort(arr,j+1,right);
}
return arr;
}
}


将随机数去重后存入数组,数组排序,将数组转换为字符串输出
package 数组_排序;

/**
* 此代码实现了将随机数去重后存入数组,数组排序,将数组转换为字符串输出
*/

import java.util.Arrays;

public class Suijishu_quchong_zifu {

public static void main(String[] args) {
int[] c = new int[10];// 定义一个整型数组
//int b[] = c;// 引入一个全局变量,将c的值取出
System.out.print("随机输出10个整数:");
for (int i = 0; i < c.length; i++) {
int a = (int) (Math.random() * 100);
c[i] = a;
// Math.random():随机输出double数0.00-0.99,*100后就是100以内的整数
// 将随机产生的整数赋值给数组c

for (int j = 0; j < i; j++) {
while (c[i] == c[j]) {
i--;// 如果重复,数组下标减一,即退回去重新生成随机数
}
}
System.out.print(c[i] + " ");
// 只产生随机数,不去重(去除重复的值)
// int[] c;
// c = new int[10];
// System.out.print("随机输出10个整数:");
// for (int a = 0; a < 10; a++) {
// int i = (int) (Math.random() * 100);
// // Math.random():随机输出double数0.00-0.99,*100后就是100以内的整数
// c[i] = a; // 将随机产生的整数赋值给数组c
// for (int j = 0; j < i; j++) {
// while (c[i] == c[j]) {
// i--;// 如果重复,数组下标减一,即退回去重新生成随机数
// }
// }
// System.out.print(c[i] + " ");

}
System.out.println("");
System.out.println("=========================");
// ====================================下面是数组排序
int[] d = { 99, 2, 61, 34, 45, 12, 64 };
System.out.print("排序前为: ");
for (int j = 0; j < d.length; j++) { // j<c.length:j<数组c的长度
System.out.print(d[j] + "\t");// 打印数组c[]的值
}

// for(int i=0;i<c.length;i++){ //排序
// for(int j=1;j<=i;j++){
// if(c[i]>c[j]){
// int t=0;
// t=c[i];
// c[i]=c[j];
// c[j]=t;
// }
// }
//
// }
System.out.println("");
Arrays.sort(d); // 使用Arrays类的sort()方法对数组进行排序,从小到大排序
System.out.print("排序后为:");
for (int j = 0; j < d.length; j++) {
System.out.print(d[j] + "\t");// 打印排序后数组
}
/*
* 将数组转换为字符串 语法:Arrays.toString(数组名); 该方法按顺序把多个数组元素连在一起,多个元素之间用逗号加空格隔开
*/
System.out.println();
System.out.println("输出数组score中的元素:" + Arrays.toString(d));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: