1樓:匿名使用者
其實,最想說明的是那段交換的**
r[j]^=r[i];
r[i]^=r[j];
r[j]^=r[i];
一定要排除 i==j 的情況。即自己與自己交換的情況。
如:a=9;
a^=a;/*a=0*/
a^=a;/*a=0*/
a^=a;/*a=0*/
a就不再是10了。
#include
#include
void quicksort(int r,int s,int t)
}i--;
if(r[s] /*將參照數 與 最後一個小於等於參照數的數進行交換,這樣就真正把左右兩個陣營分開了*/ r[s]=r[i]; r[i]=temp; quicksort(r,s,i-1); quicksort(r,i+1,t);}} int main(void) ;quicksort(a,0,sizeof(a)/sizeof(int)-1); for(i=0;i printf("%d ",*(a+i)); return 0;} 2樓:冒險島樂樂 r[j]^=r[i]; r[i]^=r[j]; r[j]^=r[i]; 你的**裡面r[i]^,r[j]^從何而來?不理解,不好改。 快速排序作為c語言中速度最快的一種排序,肯定能處理數字相同的情況,而且快速排序肯定是用遞迴演算法。你的問題是演算法,這裡有個帶註釋的快速排序,win-tc和dev-c++下執行通過。 #include #include #define max 255 int r[max]; int partition(int i,int j) r[i]=pivot; /* 基準記錄已被最後定位*/ return i; } void quick_sort(int low,int high) /* 對r[low..high]快速排序 */ puts("please input the elements one by one:"); for(i=1;i<=n;i++) scanf("%d",&r[i]); puts("the sequence you input is:"); for(i=1;i<=n;i++) printf("%4d",r[i]); quick_sort(1,n); puts("\nthe sequence after quick_sort is:"); for(i=1;i<=n;i++) printf("%4d",r[i]); puts("\n press any key to quit..."); getch();} 3樓:伊·梵 r[j]^=r[i]; r[i]^=r[j]; r[j]^=r[i]; 就是交換r[i]和r[j] 4樓: #include #include 增加的,交換中間數和第一個數r[i]=temp; quicksort(r,s,i-1); quicksort(r,i+1,t);}}int main() ;int n = sizeof(a)/sizeof(int); quicksort(a,0,n-1); for(i=0;i printf("%d ",*(a+i)); // system("pause"); return 1;} c語言快排問題 5樓:匿名使用者 void quicksort(int a,int s,int t)a[i]=tmp; quicksort(a,s,i-1); quicksort(a,i+1,t); } } 6樓:hhp和尚 我不知道你這個程式的主程式是什麼,再加上我菜鳥一個,不懂!!! 只覺得你得保證a[rand()%(t-s)]的下標不會越界,還有就是我覺得要用指標來做這題 其它沒什麼疑問了 檔案輸入和輸出是很重要的 因為對於資料庫的訪問,就必須通過檔案的輸入輸出來解決。現在的資料一般都是儲存在檔案中的,比如某個學校的學生資訊,這些資訊肯定要事先儲存在檔案中,這些檔案可能是資料庫檔案也可能是一般的檔案,但絕不可能在使用c語言的時候再來現場輸入,所以當你使用c需要對這些資料進行處理,比如使... include main for i 0 i printf d a i printf n 測試用例 過程寫的不是很詳細,只寫了主要部分,如果有什麼不明白的地方歡迎追問。源 如下 include int main for i 0 i 10 1 i for i 0 i 10 i printf n ret... 輸入資料那塊 for i 0 i 10 i 你寫的先輸入名字後輸分數,而你讀取時是先讀分數 後讀名字這裡可能是你出錯的原因之一 還有就是最好不要在scanf 讀取時有逗號出現就像下面這句 如果這裡兩個格式控制符中間有逗號 當你輸入時也要在兩個輸入的變數之間加上逗號,並且當你輸入的時候輸入的是中文狀態...C語言菜鳥問題
C語言氣泡排序
C語言排序問題