快速排序演示

原创 2015年07月06日 19:21:22
#include<iostream>
#define CUTOFF 10  // 定义快速排序的数组规模下届


// 交换两个整数
void swap(int *fir, int *sec) {
	int temp = 0;
	temp = *fir;
	*fir = *sec;
	*sec = temp;
}


// 插入排序算法
void InsertionSort(int A[], int n ) {
	int j, p;
	int tmp;

	for(p = 1; p < n; p++ ) {
		tmp = A[ p ];
		for( j = p; j > 0 && A[ j - 1 ] > tmp; j-- )
			A[ j ] = A[ j - 1 ];
		A[ j ] = tmp;
	}
}


// 三数中值分割
int Median3(int A[], int left, int right) {
	// 计算中间位置
	int center = (left + right) / 2;

	if( A[ left ] > A[ center ] ) 
		swap( &A[ left ], &A[ center ] );
	if( A[ left ] > A[ right ] ) 
		swap( &A[ left ], &A[ right ] );
	if( A[ center ] > A[ right ] ) 
		swap( &A[ center ], &A[ right ] );

	/* 不变等式: A[left] <= A[center] <= A[right] */

	swap( &A[ center ], &A[ right - 1 ] );  // 隐藏枢纽元
	return A[right - 1];
}


// 快速排序算法
void Qsort(int A[], int left, int right) {
	int i, j;
	// 枢纽元
	int pivot; 

	if( left + CUTOFF <= right ) {
		pivot = Median3( A, left, right );
		// 初始化i,j的位置
		i = left; j = right - 1;
		for( ; ; ) {
			while( A[ ++i ] < pivot ) {}
			while( A[ --j ] > pivot ) {}
			if( i < j )
				swap( &A[ i ], &A[ j ]);
			else 
				break;
		}
		// 将枢纽元与i所指向的元素交换
		swap( &A[ i ], &A[ right - 1 ]);


		// 以i为分界线,分别对左右两端递归的进行快速排序
		Qsort( A, left, i - 1);
		Qsort( A, i + 1, right);
	}
	else  // 在该数组上做一次插入排序
		InsertionSort(A + left, right - left + 1);
}


// 打印数组
void printArray(int A[], int len) {
	int length = len;
	int index;
	
	for(index = 0; index <= len - 1; index++) {
		printf("%d ", A[index]);
	}
}


int main(){
	// 函数声明
	void swap(int *fir, int *sec);
	void InsertionSort(int A[], int n );
	int Median3(int A[], int left, int right);
	void Qsort(int A[], int left, int right);
	void printArray(int A[], int len);

	int A[15] = {2,5,1,7,6,19,30,9,4,8,21,11,18,22,47};
	printf("快速排序之前: \n");
	printArray(A, 15);

	Qsort(A, 0, 14);

	printf("\n");
	printf("快速排序之后: \n");
	printArray(A, 15);
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

JavaScript排序算法动画演示效果实现

JavaScript排序算法动画演示效果实现。冒泡排序、插入排序、选择排序、快速排序、归并排序、希尔排序动画演示。 实现过程。...
  • liusaint1992
  • liusaint1992
  • 2016年06月13日 11:29
  • 3509

快速排序-flash演示

  • 2011年11月16日 14:44
  • 16KB
  • 下载

JavaScript界面演示 快速排序

不管用什么语言, 思想都一样 做这个首先的会快速排序,这里不解释了,只是走出页面效果 注意:  如果把一条一条div放入数组,那么div交换位置的时候, 注意数组的处理,需要保存左面或右边的left值...
  • cnm_1314
  • cnm_1314
  • 2016年04月21日 18:05
  • 264

图文讲解QuickSort快速排序算法(Java版)

什么是快速排序? 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此...
  • IT_ZJYANG
  • IT_ZJYANG
  • 2016年11月30日 14:28
  • 3649

从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

作者:寒小阳 时间:2013年9月。 出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。 声明:版权所有,转载请注明...
  • kakaka2011
  • kakaka2011
  • 2015年06月28日 20:40
  • 2413

快速排序的动画演示(推荐)

  • 2011年03月10日 18:47
  • 9KB
  • 下载

快速排序和归并排序 使用图形化界面的方式

实现归并排序的另一种方式是从小数组开始归并:首先我们将数组的每一个元素都当做一个只有一个元素的数组,然后将其两两归并。然后我们将整个数组的每两个元素都当做一个小数组,然后将其两两归并,然后四个四个归并...
  • mymy_blog
  • mymy_blog
  • 2017年01月19日 22:16
  • 402

快速排序——JAVA实现(图文并茂)

高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数...
  • as02446418
  • as02446418
  • 2015年08月10日 11:08
  • 2571

快速排序 过程图解

注意:此文为转载文章,原文地址为:http://www.cnblogs.com/ahalei/p/3568434.html            原作者:啊哈磊              ...
  • hrn1216
  • hrn1216
  • 2016年05月28日 19:39
  • 27789

快速排序(含完整源码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/20306991 快速排序      如名所示,快速排序是已知的平均时间复杂度均为O(...
  • tomcmd
  • tomcmd
  • 2015年08月26日 20:05
  • 1419
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序演示
举报原因:
原因补充:

(最多只允许输入30个字)