冒泡排序
/**
* 冒泡排序
* @param
*/
public static void main(String[] args){
int [] a = {2,8,7,4,9,3,1,6,7};
int b =0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1;j++){
if(a[j]>a[j+1]){
//将两者中较小的值复制给临时变量b
b=a[j+1];
//然后将较大值赋值给第二个数a[j+1]
a[j+1]=a[j];
//将较小值赋值到第一个数
a[j]=b;
}
System.out.println(b);
}
}
System.out.println("冒泡排序后结果 :");
for(int i=0;i<a.length;i++){
System.out.print(a[i]);
}
System.out.println();
System.out.println("冒泡排序后结果 :");
for(int num: a){
System.out.print(num);
}
}
打印结果
降序排序最基础写法
/**
* 降序排序
* @param
*/
public static void main(String[] args){
int [] a = {2,8,7,4,9,3,1,6,7};
int b =0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1;j++){
//降序和冒泡排序一样 将这个判断大于改成小于就行了
if(a[j]<a[j+1]){
b=a[j+1];
a[j+1]=a[j];
a[j]=b;
}
System.out.println(b);
}
}
System.out.println("降序排序结果 :");
for(int i=0;i<a.length;i++){
System.out.print(a[i]);
}
System.out.println();
System.out.println("降序排序结果 :");
for(int num: a){
System.out.print(num);
}
}
打印结果
降序排序另外一个种写法,Java中sort实现降序排序
/**
* 利用Collections的reverseOrder方法实现降序
* @param args
*/
public static void main(String[] args) {
Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(a, Collections.reverseOrder());
System.out.println("降序排序结果:");
for (Integer num : a) {
System.out.print(num);
}
}
打印结果
直接插入排序
/**
* 直接插入排序
* @param args
*/
public static void main(String[] args) {
int [] arr= {1,4,6,8,2,5,3,7,9};
int temp;
System.out.println("数组排序前顺序:");
for(int n : arr){
System.out.print(n+" ");
}
//直接插入排序
//外层循环确定待比较数值
for (int i=1;i<arr.length;i++) { //必须i=1,因为开始从第二个数与第一个数进行比较
temp = arr[i]; //待比较数值
int j;
//内层循环为待比较数值确定其最终位置
for (j = i - 1;j>=0 && arr[j]>temp;j--) { //待比较数值比前一位置小,应插往前插一位
//将大于temp的值整体后移一个单位
arr[j+1] = arr[j];
}
arr[j+1] = temp; //待比较数值比前一位置大,最终位置无误
}
System.out.println();
System.out.println("数组排序后顺序:");
for(int n : arr){
System.out.print(n+" ");
}
}
第二种写法
public static void main(String [] args){
int []a = {4,9,8,7,6,3,15,98,1};
int b=0;
for(int i=1;i<a.length;i++){
for(int j =i;j>0;j--){
if (a[j]<a[j-1]){
b=a[j-1];
a[j-1]=a[j];
a[j]=b;
}
}
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
打印结果
希尔排序
/**
* 希尔排序
* @param args
*/
public static void main(String[] args) {
int [] a= {1,4,6,8,2,5,3,7,9};
int len=a.length;//单独把数组长度拿出来,提高效率
int number = 0;
while(len!=0){
len=len/2;
for(int i=0;i<len;i++){//分组
for(int j=i+len;j<a.length;j+=len){//元素从第二个开始
int k=j-len;//k为有序序列最后一位的位数
int temp=a[j];//要插入的元素
for(;k>=0&&temp<a[k];k-=len){
a[k+len]=a[k];
}
number++;//比较次数
a[k+len]=temp;
System.out.print(a[k+len]+" ");
}
}
}
System.out.println("循环次数= "+number);
System.out.println("数组排序后的结果");
for(int num : a){
System.out.print(num);
}
}
堆排序
/**
* 堆排序
*/
public static void main(String[] args) {
int [] a= {1,4,6,8,2,5,3,7,9};
//构造初始堆,从第一个非叶子节点开始调整,左右孩子节点中较大的交换到父节点中
for (int i = (a.length) / 2 - 1; i >= 0; i--) {
headAdjust(a, a.length, i);
}
//排序,将最大的节点放在堆尾,然后从根节点重新调整
for (int i = a.length - 1; i >= 1; i--) {
int temp = a[0];
a[0] = a[i];
a[i] = temp;
headAdjust(a, i, 0);
}
System.out.println("排序后结果:");
for (int num : a) {
System.out.print(num + " ");
}
}
private static void headAdjust(int[] a, int len, int i) {
int k = i, temp = a[i], index = 2 * k + 1;
while (index < len) {
if (index + 1 < len) {
if (a[index] < a[index + 1]) {
index = index + 1;
}
}
if (a[index] > temp) {
a[k] = a[index];
k = index;
index = 2 * k + 1;
} else {
break;
}
}
a[k] = temp;
}
打印结果