常用java排序算法举例

话说,学习算法在日常开发中,有多大的作用?

老实说,真没多大的用处。

我目前从事企业系统运维,算法更是用不到。

那么,又问自己,学习的目的是什么?答:1,为写出更高质量的代码做准备;2,提高逻辑思维能力;3,锻炼空间想象力


这里推荐大家,在学习排序算法时候,以维基百科做参考。注意页面的右上角,那儿显示一张动态二维图,具体描述了算法运算的整个过程,很有趣。


排序算法很多种,我相信精通了其中几种,其他的便可推敲出来。

以下我是学习过的排序算法,并且都经过我一一测试,现在整理列出来。


一 冒泡排序

public class BubblleSort {
	
	public static void main(String[] args){
		
		int[] arr = {2,4,6,5,9};
		sort(arr);
		
		int k;
		for(k = 0;k < arr.length;k++){
			System.out.print(" " + arr[k]);
		}
	}
	
	public static void sort(int[] arr){
		
		int i, j, temp;
		for(i = 1;i < arr.length;i++){
			for(j = 0;j < arr.length - i;j++){
				if(arr[j] > arr[j + 1]){
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
}

二 插入算法

public class InsertionSort {
	
	public static void main(String[] args){
		
		int[] arr = {10,11,8,2,4,6,5,9};
		sort(arr);
		
		int k;
		for(k = 0;k < arr.length;k++){
			System.out.print(" " + arr[k]);
		}
	}
	
	public static void sort(int[] arr){
		
		int i, j, t;
		for(i = 1;i < arr.length;i++){
			t = arr[i];
			j = i - 1;
			
			while(j >= 0 && t < arr[j]){
				arr[j + 1] = arr[j];
				j--;
			}
			arr[j + 1] = t;
		}
	}
}

三 希尔排序

public class ShellSort {
	
	public static void main(String[] args){
			
		int[] arr = {10,11,8,2,4,6,5,9};
		sort(arr);
		
		int k;
		for(k = 0;k < arr.length;k++){
			System.out.print(" " + arr[k]);
		}
	}
	
	public static void sort(int[] arr){
		
		int i, j, h;
		int r, temp;
		int x = 0;
		for(r = arr.length;r >= 1;r /= 2){
			
			for(i = r;i < arr.length;i++){
				
				temp = arr[i];
				j = i - r;
				while(j >= 0&&temp < arr[j]){
					arr[j + r] = arr[j];
					j -= r;
				}
				arr[j + r] = temp;
			}
		}
	}
}

四 快速排序

public class QuickSort {
	public static void QuickSort(int[] a, int left, int right) {
		if (left < right) {
			int key = a[left];
			int i = left, j;
			for (j = left + 1; j <= right; j++) {
				if (a[j] < key) {
					int temp = a[j];
					a[j] = a[i + 1];
					a[i + 1] = temp;
					i++;
				}
			}
			a[left] = a[i];
			a[i] = key;
			QuickSort(a, left, i - 1);
			QuickSort(a, i + 1, right);
		}
	}

	public static void main(String[] args) {
		int arr[] = new int[] { 23, 213, 134, 44, 77, 78, 11, 43 };
		QuickSort(arr, 0, arr.length - 1);

		for (int i = 0; i < arr.length; i++) {
			System.out.println("i:  " + arr[i]);
		}
	}
}

五 选择排序

public class SelectionSort {

	public static void main(String[] args){
		
		int[] arr = {10,11,8,2,4,6,5,9};
		sort(arr);
		
		int k;
		for(k = 0;k < arr.length;k++){
			System.out.print(" " + arr[k]);
		}
	}
	
	public static void sort(int[] arr){
		
		int i, index, temp;
		for(i = 0;i < arr.length - 1;i++){
			
			int j;
			index = i;
			for(j = i + 1;j < arr.length;j++){
				if(arr[j] < arr[index]){
					index = j;
				}
			}
			
			if(index != i){
				temp = arr[i];
				arr[i] = arr[index];
				arr[index] = temp;
			}
		}
	}
}

One thing leads to another thing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值