求指正!C语言实现快速排序算法

C语言实现快速排序算法,代码出错了,看了很久不懂错在哪里,求解,谢谢各位胖友!

下面po上代码以及错误提示。

(请忽略俺纠结的注释……)

#include<stdio.h>
#include<stdlib.h>
/*************************************
需要写三个函数

打印数组的函数print(int a[],int end)

快速排序一次划分的算法partition(int a[],int first,int end)

快速排序完整算法,递归调用,分治quicksort(int a[],int first,int end)

**************************************/


/*************************************
打印数组的函数print(int a[],int end)
用for循环,i++控制循环次数
**************************************/
void print(int a[], int end)
{
	int i;
	for(i=0; i<=end; i++)
	{
		print("%d,",  a[i]);
	}
	printf("\n");  
	return;
}

/*************************************
快速排序一次划分的算法partition(int a[],int first,int end)
将i,j的值传给参数first,end
大前提是i<j,接着先扫描右边再扫描左边
具体:
i<j? 是  注:要一直进行该判断! 
①a[i]<a[j]? 是(j--(即一直减到在右边扫描到一个比a[i]小的数,并记录此时j的值)) 
②a[i]<a[j]? 否(基准数与 a[j]交换,并i++(即先准备(记录)好下一轮从左边起的该扫描段的起点)) 

最后,返回i (心机婊,这个i是分界点,分水岭(处于这个点上的数意味着已经被排到了正确的位置上了)) 


“一直 ”用 while 循环 
 
**************************************/
int partition(int a[],int first,int end)
{
	int temp;
	int i=first;
	int j=end;
	
	while(i<j)
	{
		while(a[i]<a[j])
		{
			j--;
		}
		if(i < j)
		{
			temp=a[i];
			a[i]=a[j];
			a[j]=temp;
			i++;
		}
		
		while (a[i] <= a[j]) 
		{
			i++;
		}
        if (i < j){
            temp=a[i];
			a[i]=a[j];
			a[j]=temp;
            j--;
        }
	} 
	return i;
} 

/*************************************

快速排序完整算法,递归调用,分治quicksort(int a[],int first,int end)
调用函数partition()
使用partition()返回的分界点i
对i之前的那部分数用partition() ,
和对i之后的那部分数用partition()  

**************************************/
void quicksort(int a[],int first,int end)
{	
	
	int point=partition(a,first,end);
	quicksort(a, first, point-1);
	quicksort(a, point+1, end);
	return;
} 


/*************************************
main函数
初始化数组,即写入待排序数组 
并把值传给参数first,end
**************************************/
int main()
{
	int a[]={2,3,8,1,9};
	int first=0;
	int end=4;
	
	printf("原始数组:");
	print(a,end);
	quicksort(a,first,end);
	printf("排序后:");
	print(a,end);
	system("pause");
	return 0;
}

错误提示:

          E:\C-SPACE\fang快速排序.cpp In function 'void print(int*, int)':

26 21 E:\C-SPACE\fang快速排序.cpp [Error] cannot convert 'const char*' to 'int*' for argument '1' to 'void print(int*, int)'

http://img4.mukewang.com/5ab146b70001880610120139.jpg

我是拿Dev-C++编译运行的。

all……

请各位大佬讲解时尽量简单详尽,

或者告诉俺应该着重看哪个方面的内容……

谢谢各位大佬了……

for(i=0;i<1000000;i++)

{

        printf("给大佬递茶");

}

http://img4.mukewang.com/5ab147ee0001c47e03220269.jpg

酉时酒味浓
浏览 3365回答 3
3回答

Jedenn

void print(int a[], int end) {     int i;     for(i=0; i<=end; i++)     {         print("%d,",  a[i]);  //这里出错了,不是print,而是printf。     }     printf("\n");       return; }不要写和库函数如此类似的自定义函数。另外,错误提示有给出错误发生的位置,心细一点就能发现了。

酉时酒味浓

print()函数改过来后又有新问题……妈耶,继续求助,谢谢各位大佬

Jedenn

void quicksort(int a[],int first,int end) {       // 你这个递归函数没有终止条件,是无法返回的。递归调用无法终止,     int point=partition(a,first,end);     quicksort(a, first, point-1);     quicksort(a, point+1, end);     return; }你这个递归函数没有终止条件,是无法返回的。递归调用无法终止,于是不停地在栈区压入函数调用,久而久之就超出了栈的大小(一般大小为2M),于是程序就尝试访问不该访问的内存,操作系统就触发一个segment fault的信号。void quicksort(int a[],int first,int end) {   if(first < end){ int point=partition(a,first,end); quicksort(a, first, point-1); quicksort(a, point+1, end); } return; }这个代码就不会无限递归了,但是还有其他的逻辑问题,你这段代码还有其他的错误。
打开App,查看更多内容
随时随地看视频慕课网APP