`
曹老英雄
  • 浏览: 4780 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

黑马程序员--Java简单排序算法

    博客分类:
  • JAVA
阅读更多

------- android培训java培训、期待与您交流! ----------

Java简单排序算法

最简单的排序方法:直接选择排序、冒泡排序。

选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。常用的选择排序方法有直接选择排序和堆排序。

直接选择排序:

1)关键字比较次数

无论文件初始状态如何,在第i趟排序中选出最小关键字的记录,需做n-i次比较,因此,总的比较次数为:n(n-1)/2=0(n2)

2)记录的移动次数

当初始文件为正序时,移动次数为0

文件初态为反序时,每趟排序均要执行交换操作,总的移动次数取最大值3(n-1)

直接选择排序的平均时间复杂度为O(n2)

 

 

class SelectionSort
{
	public static void main(String[] args)
	{
		double[] arr = new double[10000];
		for(int i=0;i<arr.length;i++)
		{
			arr[i]=(arr.length*Math.random());
		}
		//排序前时间
		long st1 = System.currentTimeMillis();
		//排序
		sort(arr);
		//排序后时间
		long st2 = System.currentTimeMillis();
		for(int i=0;i<arr.length;i++)
		{
			System.out.print(arr[i]+" ");
		}
		System.out.println("");
		System.out.println("共花费"+(st2-st1)+"毫秒");
	}
	
	public static void sort(double[] a)
	{
		int sortedLen= a.length;
		for(int i=0;i<sortedLen-1;i++)
		{
			for(int j=i+1;j<sortedLen;j++)
			{
				if(a[i]>a[j])
				{
					swap(a,i,j);
				}
			}
		}
	}
	public static void swap(double[] arr,int a,int b){
			double temp = arr[a];
			arr[a] = arr[b]; 
			arr[b] = temp;	
	}

}

 

交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。

冒泡排序:

1)算法的最好时间复杂度

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:

Cmin=n-1

Mmin=0

冒泡排序最好的时间复杂度为O(n)

2)算法的最坏时间复杂度

若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1in-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

Cmax=n(n-1)/2=O(n2)

Mmax=3n(n-1)/2=O(n2)

冒泡排序的最坏时间复杂度为O(n2)

3)算法的平均时间复杂度为O(n2)

虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。

class BubbleSort {
	public static void main(String[] args) {
		double[] arr = new double[10000];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (arr.length * Math.random());
		}
		// 排序前时间
		long st1 = System.currentTimeMillis();
		// 排序
		sort(arr);
		// 排序后时间
		long st2 = System.currentTimeMillis();
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println("");
		System.out.println("共花费" + (st2 - st1) + "毫秒");
	}

	public static void sort(double[] a) {
		int sortedLen = a.length;
		for (int i = 0; i < sortedLen - 1; i++) {
			for (int j = 0; j < sortedLen - i - 1; j++) {
				if (a[j] > a[j + 1]) {
					swap(a, j, j + 1);
				}
			}
		}
	}

	public static void swap(double[] arr, int a, int b) {
		double temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

 

1
12
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics