冒泡排序

 冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

 

package com.algorithm;

/**
 * 冒泡排序
 * 冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
 * @author lenovo
 *
 */
public class BubbleSort {

	public static void sort(long[] attr){
		long tmp=0;
		//从第0个元素开始循环,循环数组长次数
		for (int i = 0; i < attr.length-1; i++) {
			//从最后一个元素开始,往前循环
			for (int j = attr.length-1; j >i; j--) {
				//如果最后一个元素比前一个小,将最后一个向上排一次
				//一直将最小的排到最前面
				if (attr[j]<attr[j-1]) {
					//交换数据
					tmp=attr[j];
					attr[j]=attr[j-1];
					attr[j-1]=tmp;
				}
			}
		}
	}
	
	public static void main(String[] args) {
		long[] attr = new long[5];
		attr[0]=34;
		attr[1]=23;
		attr[2]=2;
		attr[3]=55;
		attr[4]=1;
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
		
		sort(attr);
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
	}
}

 

 

选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

package com.algorithm;

/**
 * 选择排序
 * @author lenovo
 *每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
 *顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
 */
public class SelectionSort {

	public static void sort(long[] attr){
		//假设第0个元素是最小的
		int k=0;
		long temp =0;
		for (int i = 0; i < attr.length-1; i++) {
			k=i; 
			//通过循环,K指向的是最小的元素
			for (int j = i; j < attr.length; j++) {
				if (attr[j]<attr[k]) {
					//K永远指向最小的元素
					k=j;
				}
			}
			
			//交换数据,每次都要交换,如果当前元素就是最小的,那么也要交换数据,只不过交换了无效 
			temp=attr[i];
			attr[i]=attr[k];
			attr[k]=temp;
		}
	}
	
	public static void main(String[] args) {
		long[] attr = new long[5];
		attr[0]=34;
		attr[1]=23;
		attr[2]=2;
		attr[3]=55;
		attr[4]=1;
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
		
		sort(attr);
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
	}
}

 

 

插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置

package com.algorithm;

/**
 * 插入排序
 * @author lenovo
 *插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,
 *算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:
 *第一部分包含了这个数组的所有元素,但将最后一个元素除外,
 *而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置
 */
public class InsertSort {

	
	public static  void sort(long[] attr) {
		long temp = 0;
		//从第2个位置开始插入
		for (int i = 1; i < attr.length; i++) {
			temp =attr[i];
			int j=i;
			while (j>0&&attr[j]>=temp) {
				attr[j]=attr[j-1];
				j--;
			}
			//插入点
			attr[j]=temp;
		}
	}
	
	public static void main(String[] args) {
		long[] attr = new long[5];
		attr[0]=34;
		attr[1]=23;
		attr[2]=2;
		attr[3]=55;
		attr[4]=1;
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
		
		sort(attr);
		
		System.out.print("{");
		for (int i = 0; i < attr.length; i++) {
			System.out.print(attr[i]+" ");
		}
		System.out.println("}\n");
	}
}