黑马程序员--java基础--排序算法


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


一类:插入排序

插入排序法:
基本思想:输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,
该数组排序完毕。
希尔排序法:
基本思想:属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法(初次取序列的一半为增量,以后每次减半,直到增量为1)


二类:选择排序
选择排序:
基本思想:第1趟简单选择排序是指通过n-1次关键字的比较,从n个记录中选出关键字最小的记录(记录),并和第1个记录进行交换。共需进行n-1趟比较,直到
所有记录排序完成为止。
堆排序:
基本思想:堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关
系来选择最小的元素。


三类:交换排序
冒泡排序法:
基本思想:依次比较相邻两个数,将小数放在下面,大数放在上面。,即:首先比较第一个和第二个数,将小数置放下,大数放在上,循环依次,就可以找到最
小值,放于末尾,再次循环,将数列排好。
快速排序法
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别
进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。


四类:归并排序
基本思想:1将n个元素分成两个含n/2元素的子序列;2用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列);3合并两个已排序好的序列。


五类:基数排序

基本思想:根据数字的性质来逐个根据个位数、十位数、百位数分类求得进行分类。


快速排序是一个效率较高的算法,在此示例一下快速排序的算法。

public class Test01 {
	
	public static void main(String[] args) 
	{
		int[] arr={43,11,28,14,63,18,87,23,73};
		quickSort s=new quickSort();
		s.arr=arr;
		s.Display();									//输出原数组
		s.sort(0,s.arr.length-1);						//对数组进行排序
		s.Display();									//输出排序后的数组
	}
	

}
class quickSort{
	int[] arr;
	int partition(int sortArray[],int low,int hight)
	{
		int key = sortArray[low];						//定义关键数据
		while(low<hight)
		{
			while(low<hight && sortArray[hight]>=key)
				hight--;
			sortArray[low] = sortArray[hight];			//将较小的值放在前端
			while(low<hight && sortArray[low]<=key)
				low++;
			sortArray[hight] = sortArray[low];			//将较大的值放在后端
		}
		sortArray[low] = key;							//将关键数据放在数组中间
		return low;										//返回中间位置
	}

	void sort(int low,int hight)
	{
		if(low<hight)
		{
			int result = partition(arr,low,hight);		//将数组一分为二,并获取数组的中间位置
			sort(low,result-1);							//对前端进行排序
			sort(result+1,hight);						//对后端进行排序
		}
	}

	void Display()										//输出
	{
		for(int i=0;i<arr.length;i++)
		{
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
}


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值