常用排序算法及代码实现(java)

1、常用排序算法
插入排序:直接插入排序、二分法插入排序
直接插入排序:从第i个开始,假设前i个元素构成的子序列是排序的,然后第i个元素从子序列中找到位子插入(顺序查找),算法稳定
二分法插入排序:从第i个开始,假设前i个元素构成的子序列是排序的,然后第i个元素从子 序列中找到位子插入(二分法查找),算法稳定

交换排序:冒泡排序、快速排序
冒泡排序:每跑一趟把最大的元素交换到最后面(反之),算法稳定
快速排序:每跑一趟把第一个元素作为基准值,1小于基准值的放前面,2大于基准值的放后面,在基准值前面和后面的序列重复执行1、2,算法不稳定

选择排序:直接选择排序、堆排序
直接选择排序:每次选择一个最大的放在后面(反之),算法不稳定

2、代码实现
(1)直接插入排序

public class Zhijiecharu {
	public static void main(String[] args) {
		//直接插入排序
        int a[] = {3,5,1,8,2};
        for(int i=1; i<a.length; i++){
        	for(int j=0; j<i; j++){
            	if(a[i] < a[j]){
            		int y = 0;
            		y = a[i];
                    for(int k=i; k>j; k--){
                    	a[k] = a[k-1];
                    }
                    a[j] = y;
            	}
            }
        }
        //排序后
        for(int i=0; i<a.length; i++){
        	if(i < (a.length-1)){
        		System.out.print(a[i]+",");
        	}
        	else{
        		System.out.println(a[i]);
        	}
        }
	}
}

(2)二分法插入排序

public class Erfenfacharu {
	public static void main(String[] args) {
		//二分法插入排序
        int a[] = {3,5,1,8,2};
        erfen(a);
        //排序后
        for(int i=0; i<a.length; i++){
        	if(i < (a.length-1)){
        		System.out.print(a[i]+",");
        	}
        	else{
        		System.out.println(a[i]);
        	}
        }
	}
	public static void erfen(int a[]){
		for(int i=1; i<a.length; i++){
			int tem = a[i];
			int low = 0, hight = i-1;
			int mid = -1;
			while(low <= hight){
				mid=(low + hight)/2;
				if(a[mid] > tem){
					hight = mid - 1;
				}else{
					low = mid + 1;
				}
			}
        	for(int j=i-1; j>=low; j--){
            	a[j+1] = a[j];
            }
        	a[low] = tem;
        }
	}
}

(3)冒泡排序

import java.util.*;
public class Maopao {
	public static void main(String[] args) {
		//冒泡排序
        int a[] = new int[5];
        Scanner s = new Scanner(System.in);
        for(int i=0; i<a.length; i++){
        	a[i] = s.nextInt();
        }
        for(int i=0; i<a.length; i++){
        	for(int j=0; j<a.length-1-i; j++){
        		if(a[j] > a[j+1]){
        			int x = a[j+1];
        			a[j+1] = a[j];
        			a[j] = x;
        		}
            }	
        }
        System.out.print("排序后:");
        for(int i=0; i<a.length; i++){
        	if(i < (a.length-1)){
        		System.out.print(a[i]+",");
        	}
        	else{
        		System.out.println(a[i]);
        	}
        }
	}
}

(4)快速排序

public class Kuaisu {
	public static void main(String[] args) {
		//快速排序
        int a[] = {23,4,50,1,55,16,30,90};
        kuai(a, 0, a.length-1);
        System.out.println("排序后:");
        for(int i=0; i<a.length; i++){
        	System.out.print(a[i]+",");
        }
	}
	public static void kuai(int a[], int bejin, int end){
		int i = bejin, j = end;
		if(i >= 0 && i < a.length && j >= 0 && j < a.length && i < j){
			int x = a[i];
			while(i < j){
				for(; j>i; j--){
					if(a[j] < x){
						a[i] = a[j];
						i++;
						break;
					}
				} 
				for(; i<j; i++){
					if(a[i] > x){
						a[j] = a[i];
						j--;
						break;
					}
				}
			}
			a[i] = x; 
			kuai(a, bejin, j-1);
			kuai(a, i+1, end);
		}
	}
}

(5)直接选择排序

package com.paixu;

public class Zhijiexuanze {
	public static void main(String[] args) {
		//直接选择排序
        int a[] = {5,2,100,8,200,3};
        for(int i=0; i<a.length; i++){
        	int min=a[i];
        	for(int j=i; j<a.length; j++){
        		if(a[j] < min){
        			int x = min;
        			min = a[j];
        			a[j] = x;
        		}
        	}
        	a[i] = min;
        	if(i != 0) {
        		System.out.println(":第"+i+"次");
        	}
        	for(int h=0; h<a.length; h++){
            	System.out.print(a[h]+",");
            }
        }
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值