×

c语言快速排序简单代码

c语言快速排序简单代码(C语言快速排序)

admin admin 发表于2024-03-22 10:52:41 浏览28 评论0

抢沙发发表评论

大家好,如果您还对c语言快速排序简单代码不太了解,没有关系,今天就由本站为大家分享c语言快速排序简单代码的知识,包括C语言快速排序的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

C语言快速排序

*/快速排序算法/*int Partition(int D, int l, int r){ D; while (l《r) { while (l《r && D) r--; D; while (l《r && D) l++; D; } D; return r;}void Qsort(int D, int l, int r){ int p; if (l《r) { p=Partition(D, l, r); Qsort(D, l, p-1); Qsort(D, p+1, r); }}void QuickSort(int D, int L){ Qsort(D, 1, L);}main(){ int i; int D={0,12,5,36,13,22,19,2,7,33,52,23,42,25,31,12,20,8,16,27,2}; QuickSort(D,20); printf("\n"); for(i=1; i《=20; i++) printf("%3d",D);}

急需快速排序C语言原程序

#include《iostream.h》intdata={54,38,96,23,15,72,60,45,83};virus51cto技术博客voidquick_sort(intdata,intlow,inthigh){virus51cto技术博客inti,j,pivot;virus51cto技术博客if(low《high)virus51cto技术博客{virus51cto技术博客pivot=data;virus51cto技术博客i=low;virus51cto技术博客j=high;virus51cto技术博客virus51cto技术博客while(i《j)virus51cto技术博客{virus51cto技术博客while(i《j&&data》=pivot)virus51cto技术博客j--;virus51cto技术博客if(i《j)virus51cto技术博客data;//将比枢轴记录小的记录移到低端virus51cto技术博客virus51cto技术博客while(i《j&&data《=pivot)virus51cto技术博客i++;virus51cto技术博客if(i《j)virus51cto技术博客data;//将比枢轴记录大的记录移到高端virus51cto技术博客}virus51cto技术博客virus51cto技术博客data=pivot;//枢轴记录移到最终位置virus51cto技术博客virus51cto技术博客quick_sort(data,low,i-1);virus51cto技术博客quick_sort(data,i+1,high);virus51cto技术博客}virus51cto技术博客}virus51cto技术博客virus51cto技术博客voidmain()virus51cto技术博客{virus51cto技术博客quick_sort(data,0,8);virus51cto技术博客}virus51cto技术博客virus51cto技术博客下面是对这段程序的分析:virus51cto技术博客“pivot=data;”表示将最低端即第一个元素作为枢轴记录,暂存到pivot中去,“while(i《j)”表示当高低指针相遇时循环终止,否则继续。“while(i《j&&data》=pivot)j--;”表示从高端(即数组后面)开始搜索,直到搜索到一个比枢轴值小的某个元素,条件“data》=pivot”用的是大于或等于号,可见,在搜索过程中若遇到相等的则跳过并继续搜索,条件“i《j”不可少,因为在搜索过程中,low与high可能相遇,此“i《j”跟外层while的条件“i《j”无关,作用各不相同,外层while的条件“i《j”是判断在进行从高端向低端搜索一趟、从低端向高端搜索一趟之后高低指针是否相遇,而前者却是在单向的搜索过程中为防止高低指针相遇。virus51cto技术博客当经过“while(i《j&&data》=pivot)j--;”的搜索之后,搜索到一个比枢轴小的元素,因为在搜索完之后i、j可能相等,若相等,就没有交换的必要,因此紧接下面设置了一个判断“if(i《j)”,若成立,那么就要将比枢轴记录小的记录移到低端“data;i++;”两句的效果。为什么要i++?是因为刚交换的记录肯定比枢轴小,那么紧接下面的语句“while(i《j&&data《=pivot必定成立,而i《j在前面的if语句中已成立,则“i《j&&data《=pivot”必成立,若没有i++,while中的““i《j&&data复制到这个位置。virus51cto技术博客紧接下来的“while(i《j&&data《=pivot)i++;”是从低端向高端搜索,直到找到一个比枢轴大的元素,先进行判断“if(i《j)”,若成立,如前所述,执行“data复制到上次赋值后空出的j位置。virus51cto技术博客如此反复,直到外层while的条件不成立,即i==j,即高低指针相遇,表示已经找到了枢轴记录pivot的最终位置i,执行“data=pivot;”于是,枢轴记录移到最终位置。接下来的“quick_sort(data,low,i-1);quick_sort(data,i+1,high);”表示,对被pivot分开的左右子序列进行递归的快速排序。virus51cto技术博客

用C语言编写函数实现快速排序(升序),在主函数中输入数组数据,并调用该数得到排序结果

//希望对楼主有小小的帮助。。。//排序的算法是二分法,N的对数时间复杂度。。。//如果有疑问,我们可以再探讨。。。#include《stdlib.h》#include《string.h》#include《stdio.h》bool merge(int * array,int p,int q,int r){if(!(p《《q《r)&&p》=0&&r《=sizeof(array)/sizeof(array)-1){return false;}int * left =new int;int * right=new int;memcpy(left,array+p,sizeof(int)/sizeof(char)*(q-p+1));memcpy(right,array+q+1,sizeof(int)/sizeof(char)*(r-q));int left_index=0,right_index=0,left_max_index,right_max_index;left_max_index=q-p+1;right_max_index=r-q;for(int k=p;k《=r&&left_index《left_max_index&&right_index《right_max_index;++k){if(left){array;++left_index;}else{array;++right_index;}}if(left_index==left_max_index){for(;k《=r&&right_index《right_max_index;++k,++right_index){array;}}else if(right_index==right_max_index){for(;k《=r&&left_index《left_max_index;++k,++left_index){array;}}delete left;delete right;return true;}void merge_sort(int * array,int p,int r){if(p《r){int q=(r+p)/2;merge_sort(array,p,q);merge_sort(array,q+1,r);merge(array,p,q,r);}}void main(){int size,index,* array;//printf("请输入元素个数:");scanf("%d",&size);array=(int*)malloc(size*sizeof(int));for(index=0;index《size;index++){//printf("请输入第%d元素:",index+1);scanf("%d",&array);}merge_sort(array,0,size-1);for(index=0;index《size;index++){printf("%d ",array);}printf("\n");}

c语言生成50个随机数,对随机数进行快速排序

楼下的几个回答我怎么看也不是快速排序,所以我做了一个用快速排序法排序的程序

#include《stdio.h》

#include《stdlib.h》

#include《time.h》

#define LEN 50

//快速排序(升)

void quicksup(int *arr,int low,int high)

{

    int temp,l,r;

if(low《high)

{

l=low;

r=high;

temp=arr;

while(low《high)

{

while(low《high&&arr》=temp)

high--;

if(low《high)

arr;

while(low《high&&arr《=temp)

low++;

if(low《high)

arr;

}

arr=temp;

quicksup(arr,l,low-1);

quicksup(arr,low+1,r);

}

}

//快速排序(降)

void quicksdown(int *arr,int low,int high)

{

    int temp,l,r;

if(low《high)

{

l=low;

r=high;

temp=arr;

while(low《high)

{

while(low《high&&arr《=temp)

high--;

if(high==LEN)

high--;

if(low《high)

arr;

while(low《high&&arr》=temp)

low++;

if(low《high)

arr;

}

arr=temp;

quicksdown(arr,l,low-1);

quicksdown(arr,low+1,r);

}

}

//初始化数组

void init(int *arr,int len)

{

int i;

for(i=0;i《len;i++)

{

arr=rand()%1000;

}

}

//打印数组元素

void print(int *arr,int len)

{

int i;

printf("\n  ");

for(i=0;i《len;i++)

printf("%4d  ",arr);

printf("\n");

}

int main()

{

int arr;

srand((unsigned)time(NULL));

init(arr,LEN);

printf("排序前:");

print(arr,LEN);

quicksup(arr,0,LEN);

printf("排序后(升):");

print(arr,LEN);

quicksdown(arr,0,LEN);

printf("排序后(降):");

print(arr,LEN);

return 0;

}

文章分享结束,c语言快速排序简单代码和C语言快速排序的答案你都知道了吗?欢迎再次光临本站哦!