nodejs调用阿里云盾身份证二要素验证

炉火纯青! JDK源码学习指南阿里bb全新出品(极限版)限时开源

  返回  

快速排序(quick sort)

2021/8/20 20:28:27 浏览:

设待排序的表有10个元素,其关键字分别为(6,8,7,9,0,1,3,2,4,5)说明采用快速排序方法进行排序的过程。

快速排序(Quick Sort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。

在这里插入图片描述

#include <stdio.h>
#define MAXL 100
typedef int KeyType;
typedef char InfoType;

typedef struct
{	KeyType key;
	InfoType data; 
}RecType;

void CreateList(RecType R[],KeyType keys[],int n)
{
	for(int i=0;i<n;i++)
		R[i].key=keys[i];
}

void DispList(RecType R[],int n) //Rec :record 记录 
{
	for(int i=0;i<n;i++)
		printf("%d ",R[i].key);
	printf("\n");
}

int partition(RecType R[],int s,int t)	//一趟划分
{
	int i=s,j=t;                //s:开始 t:结束的下标 
	RecType tmp=R[i];			//以R[i]为基准
	while (i<j)  				//从两端交替向中间扫描,直至i=j为止
	{	while (j>i && R[j].key>=tmp.key)
			j--;				//从右向左扫描,找一个小于tmp.key的R[j]
		R[i]=R[j];				//找到这样的R[j],放入R[i]处
		while (i<j && R[i].key<=tmp.key)
			i++;				//从左向右扫描,找一个大于tmp.key的R[i]
		R[j]=R[i];				//找到这样的R[i],放入R[j]处
	}
	R[i]=tmp;
	return i;
}
void QuickSort(RecType R[],int s,int t) //对R[s..t]的元素进行快速排序
{	int i;
	RecType tmp;
	if (s<t) 					//区间内至少存在两个元素的情况
	{	
		i=partition(R,s,t);
		printf("  i=%d: ",i);
		DispList(R,10); 
		QuickSort(R,s,i-1);		//对左区间递归排序
		QuickSort(R,i+1,t);		//对右区间递归排序
	}
}

int main()
{
	int i,n=10;
	RecType R[MAXL];
	KeyType a[]={6,8,7,9,0,1,3,2,4,5};
	CreateList(R,a,n);
	printf("排序前:"); DispList(R,n);
	QuickSort(R,0,n-1);
	printf("排序后:"); DispList(R,n);
	return 0;
}

1)第26、27行代码:
RecType tmp=R[i] 保存基准:6
int i=s,指向最开始元素:6
int j=t ,指向最后的元素:5

2)第28行代码:
i<j(0<9),从两端交替向中间扫描,直至i=j为止

3)第29、30行代码:
R[j].key(5)>R[i].key(6)不成立,
于是,R[i](5)=R[j](5)。

4)第33行代码
R[i].key(6)<=tmp.key(6),成立
i++(1);

一次循环结束:
5 8 7 9 0 1 3 2 4 5

4)第28行代码:
i<j(1<9),从两端交替向中间扫描,直至i=j为止

5)第32行代码:
R[i].key(8)<=tmp.key(6),不成立
于是,R[j](8)=R[i](8);

二次循环结束:
5 8 7 9 0 1 3 2 4 8

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号