最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求指正!C語言實現(xiàn)快速排序算法

求指正!C語言實現(xiàn)快速排序算法

C語言實現(xiàn)快速排序算法,代碼出錯了,看了很久不懂錯在哪里,求解,謝謝各位胖友!下面po上代碼以及錯誤提示。(請忽略俺糾結(jié)的注釋……) #include<stdio.h> #include<stdlib.h> /************************************* 需要寫三個函數(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??是??注:要一直進行該判斷!? ①a[i]<a[j]??是(j--(即一直減到在右邊掃描到一個比a[i]小的數(shù),并記錄此時j的值))? ②a[i]<a[j]??否(基準(zhǔn)數(shù)與?a[j]交換,并i++(即先準(zhǔn)備(記錄)好下一輪從左邊起的該掃描段的起點))? 最后,返回i?(心機婊,這個i是分界點,分水嶺(處于這個點上的數(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()返回的分界點i 對i之前的那部分數(shù)用partition()?, 和對i之后的那部分數(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ù)組,即寫入待排序數(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; }錯誤提示:? ? ? ? ? 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++編譯運行的。all……請各位大佬講解時盡量簡單詳盡,或者告訴俺應(yīng)該著重看哪個方面的內(nèi)容……謝謝各位大佬了……for(i=0;i<1000000;i++){????????printf("給大佬遞茶");}
查看完整描述

3 回答

已采納
?
Jedenn

TA貢獻4條經(jīng)驗 獲得超2個贊

void?print(int?a[],?int?end)
{
????int?i;
????for(i=0;?i<=end;?i++)
????{
????????print("%d,",??a[i]);??//這里出錯了,不是print,而是printf。
????}
????printf("\n");??
????return;
}

不要寫和庫函數(shù)如此類似的自定義函數(shù)。

另外,錯誤提示有給出錯誤發(fā)生的位置,心細一點就能發(fā)現(xiàn)了。

查看完整回答
1 反對 回復(fù) 2018-03-21
?
酉時酒味濃

TA貢獻3條經(jīng)驗 獲得超2個贊

http://img1.sycdn.imooc.com//5ab22a7c0001ede308260607.jpg

print()函數(shù)改過來后又有新問題……媽耶,繼續(xù)求助,謝謝各位大佬

查看完整回答
1 反對 回復(fù) 2018-03-21
?
Jedenn

TA貢獻4條經(jīng)驗 獲得超2個贊

void?quicksort(int?a[],int?first,int?end)
{??
????//?你這個遞歸函數(shù)沒有終止條件,是無法返回的。遞歸調(diào)用無法終止,
????int?point=partition(a,first,end);
????quicksort(a,?first,?point-1);
????quicksort(a,?point+1,?end);
????return;
}

你這個遞歸函數(shù)沒有終止條件,是無法返回的。遞歸調(diào)用無法終止,于是不停地在棧區(qū)壓入函數(shù)調(diào)用,久而久之就超出了棧的大小(一般大小為2M),于是程序就嘗試訪問不該訪問的內(nèi)存,操作系統(tǒng)就觸發(fā)一個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;
}

這個代碼就不會無限遞歸了,但是還有其他的邏輯問題,你這段代碼還有其他的錯誤。

查看完整回答
反對 回復(fù) 2018-03-21
  • 3 回答
  • 0 關(guān)注
  • 3546 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號