C语言学习记录 03(分割排序法)(信息安全专业大一新生,记录c语言学习过程,如果代码能帮到您,简直万幸,同时也希望指点不足,万分感谢。)

该算法依赖于两个命名为low和high的标记,这两个标记用来跟踪数组内的位置。开始时,low指向数组中的第一个元素,high指向末尾元素。首先吧第一个元素(分割元素)复制给其他地方的一个临时存储单元,从而在数组中留出一个“空位”。接下来,从右向左移动high,直到high指向的元素小于分割元素时停止。然后把这个数复制给空位,这将产生一个新的空位(high指向的)。现在从左向右移动low,直到low指向的元素大于分割元素。然后把这个数复制给high指向的空位。重复此操作,直到low和high指向相同的元素时停止。此时两个标记(low和high)都指向空位,只要吧分割元素复制给空位就可以了。

 

 现在分割元素左侧的所有元素都小于(或等于)12,右侧的元素都大于(或等于)12。接下来进行递归快排就可以了。

#include<stdio.h>
#define N 10

void quicksort(int a[],int low,int high);
int sort(int a[],int low,int high);

int main(){
	int a[N];
	int i;
	for(i=0;i<N;i++){
		scanf_s("%d",&a[i]);
	}
	quicksort(a,0,N-1);
	for(i=0;i<N;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

void quicksort(int a[],int low,int high){  /*递归快排*/
	int middle;
	
	if(low>=high) return ; /*low和high指向同一元素就停止*/
	middle=sort(a,low,N-1);  /*先找到定位分割元素应该在的位置,即low和high指向的空位*/
	quicksort(a,low,middle-1); /*对分割元素前的元素进行递归排序*/
	quicksort(a,middle+1,high);/*对分割元素后的元素进行递归排序*/
}

int sort(int a[],int low,int high){ /*分割排序*/
	int part_element=a[low];   /*分割元素*/
	for(;;){
	while(low<high&&a[high]>=part_element)  
	     high--;	
		 if(low>=high) break; 

		 a[low++]=a[high]; /*把位置不对的数移到空位(low指向)并把low向右移*/
	
	while(low<high&&part_element>=a[low])
		low++;
		if(low>=high) break;

		a[high--]=a[low]; /*把位置不对的数移到空位(high指向)并把high向左移*/
	}
	
	a[high]=part_element;  /*找出分割元素应该在的位置 */
	return high;
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值