`
xieyaxiong
  • 浏览: 41415 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

排序算法

 
阅读更多

 /**
 * 排序算法总结(冒泡排序、选择排序、插入排序、快速排序)
 * 
 * @author bruce
 *
 */
public class Sort {
	
	
	/**
	 * 冒泡排序
	 * 
	 * 每一趟不停的比较交换出最大值放在数组尾部
	 * @param arr
	 */
	public void bubbleSort(int[] arr){
		for(int i=arr.length-1;i>=0;i--){
			for(int j=0;j<i;j++){
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
	
	
	
	/**
	 * 选择排序
	 * 
	 * 和冒泡排序类似,只是选择排序只比较并记录最大值,最后再交换
	 * @param arr
	 */
	public void selectionSort(int[] arr){
		for(int i=0;i<=arr.length-1;i++){
			int temp=i;
			for(int j=i+1;j<=arr.length-1;j++){
				if(arr[j]<arr[temp]){
					temp=j;
				}
			}
			if(i!=temp){
				int t=arr[i];
				arr[i]=arr[temp];
				arr[temp]=t;
			}
		}
	}
	
	
	/**
	 * 插入排序
	 * 
	 * 遍历数组的过程中,保持数组前面部是有序的,然后不停的将当前值插入到有序数组中。
	 * @param arr
	 */
	public void insertSort(int[] arr){
		for(int i=1;i<arr.length;i++){
			int temp=arr[i];
			int t=i;
			while(t>0 && arr[t-1]>temp){
				arr[t]=arr[t-1];
				t--;
			}
			arr[t]=temp;
		}
	}
	
	
	/**
	 * 快速排序(一趟)
	 * 
	 * 选定第一个元素作标准,从后面遍历比较,比此元素小时就交换,从前面遍历比较,比此元素大时就交换。
	 * @param arr
	 * @param begin
	 * @param end
	 * @return
	 */
	private int quickSort(int arr[],int begin,int end){
		int temp=arr[begin];
		while(begin<end){
			while(begin<end && arr[end]>=temp){
				end--;
			}
			if(begin<end){
				arr[begin++]=arr[end];
			}
			while(begin<end && arr[begin]<=temp){
				begin++;
			}
			if(begin<end){
				arr[end--]=arr[begin];
			}
		}
		
		arr[begin]=temp;
		return begin;
	}
	
	
	/**
	 * 快速排序
	 * 
	 * 递归排序
	 * 
	 * 在大多数情况下,该算法的排序是最快的,快速排序也因此而得名。
	 * @param arr
	 * @param begin
	 * @param end
	 */
	public void qSort(int arr[],int begin,int end){
		if(begin<end){
			int t=quickSort(arr,begin,end);
			qSort(arr,begin,t-1);
			qSort(arr,t+1,end);
		}
	}
	
	
	public static void main(String[] args){	
		int[] arr={2,1,5,3,7,4,9,5,6};
		Sort sort=new Sort();
		// sort.bubbleSort(arr);
		// sort.selectionSort(arr);
		// sort.insertSort(arr);
		 sort.qSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
}

 

 

 

 

 

 

1:冒泡排序效果图:

 



 

 

 

 

 

 

 

2:选择排序效果图

 

 

 

 

 

3:插入排序效果图



 

 

 

 

4:快速排序效果图



 

 

 

  • 大小: 96.5 KB
  • 大小: 13.1 KB
  • 大小: 8.4 KB
  • 大小: 130 KB
2
9
分享到:
评论
2 楼 xieyaxiong 2012-08-23  
songbin0201 写道
整篇文章的精华在那些gif图片上

这话说得可不爱听了 人家可是花了一天写的程序 三分钟到网上找的图片 
1 楼 songbin0201 2012-08-23  
整篇文章的精华在那些gif图片上

相关推荐

    常用排序算法的动态演示系统

    在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,广泛应用于各种数据处理和分析...

    常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx

    常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...

    查找与排序算法的实现和应用

    常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...

    总结了各种排序算法,并用C++代码实现,并有演示

    在计算机科学领域,排序算法是数据处理中的核心部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型...

    直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现)

    希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...

    C经典算法之合并排序法

    本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...

Global site tag (gtag.js) - Google Analytics