快速排序演示

原创 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;
}

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

快速排序-flash演示

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

快速排序演示 数据结构

  • 2013年01月14日 17:23
  • 38KB
  • 下载

【郝斌数据结构自学笔记】75-78_链式二叉树遍历具体程序演示_5种常用排序概述和快速排序详细讲解_再次讨论什么是数据结构_再次讨论到底什么是泛型

75_树16_链式二叉树遍历具体程序演示 //程序执行有问题 #include #include   struct BTNode {          intdata;  ...

C#快速排序演示(VS2005)

  • 2008年12月11日 17:12
  • 47KB
  • 下载

演示快速排序算法(12KB)

  • 2006年02月23日 09:05
  • 11KB
  • 下载

java实现冒泡、选择、快速排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列...

快速排序代码

  • 2016年06月14日 14:08
  • 2KB
  • 下载

简单的快速排序

  • 2015年01月23日 09:57
  • 479B
  • 下载

快速排序(quicksort)

IT公司招人,无论笔试还是面试,快排基本上都会问到。通常情况下,快排实现有两个函数: void quickSort(int arr[], int left, int right); int parti...

快速排序算法

  • 2015年05月01日 16:41
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序演示
举报原因:
原因补充:

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