C語(yǔ)言實(shí)現(xiàn)快速排序算法,代碼出錯(cuò)了,看了很久不懂錯(cuò)在哪里,求解,謝謝各位胖友!下面po上代碼以及錯(cuò)誤提示。(請(qǐng)忽略俺糾結(jié)的注釋……)
#include<stdio.h>
#include<stdlib.h>
/*************************************
需要寫(xiě)三個(gè)函數(shù)
打印數(shù)組的函數(shù)print(int?a[],int?end)
快速排序一次劃分的算法partition(int?a[],int?first,int?end)
快速排序完整算法,遞歸調(diào)用,分治quicksort(int?a[],int?first,int?end)
**************************************/
/*************************************
打印數(shù)組的函數(shù)print(int?a[],int?end)
用for循環(huán),i++控制循環(huán)次數(shù)
**************************************/
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的值傳給參數(shù)first,end
大前提是i<j,接著先掃描右邊再掃描左邊
具體:
i<j??是??注:要一直進(jìn)行該判斷!?
①a[i]<a[j]??是(j--(即一直減到在右邊掃描到一個(gè)比a[i]小的數(shù),并記錄此時(shí)j的值))?
②a[i]<a[j]??否(基準(zhǔn)數(shù)與?a[j]交換,并i++(即先準(zhǔn)備(記錄)好下一輪從左邊起的該掃描段的起點(diǎn)))?
最后,返回i?(心機(jī)婊,這個(gè)i是分界點(diǎn),分水嶺(處于這個(gè)點(diǎn)上的數(shù)意味著已經(jīng)被排到了正確的位置上了))?
“一直?”用?while?循環(huán)?
?
**************************************/
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;
}?
/*************************************
快速排序完整算法,遞歸調(diào)用,分治quicksort(int?a[],int?first,int?end)
調(diào)用函數(shù)partition()
使用partition()返回的分界點(diǎn)i
對(duì)i之前的那部分?jǐn)?shù)用partition()?,
和對(duì)i之后的那部分?jǐn)?shù)用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函數(shù)
初始化數(shù)組,即寫(xiě)入待排序數(shù)組?
并把值傳給參數(shù)first,end
**************************************/
int?main()
{
int?a[]={2,3,8,1,9};
int?first=0;
int?end=4;
printf("原始數(shù)組:");
print(a,end);
quicksort(a,first,end);
printf("排序后:");
print(a,end);
system("pause");
return?0;
}錯(cuò)誤提示:? ? ? ? ? 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)'我是拿Dev-C++編譯運(yùn)行的。all……請(qǐng)各位大佬講解時(shí)盡量簡(jiǎn)單詳盡,或者告訴俺應(yīng)該著重看哪個(gè)方面的內(nèi)容……謝謝各位大佬了……for(i=0;i<1000000;i++){????????printf("給大佬遞茶");}
求指正!C語(yǔ)言實(shí)現(xiàn)快速排序算法
酉時(shí)酒味濃
2018-03-21 01:47:49