菜鳥提問c語言關於快速排序

2021-07-12 17:31:38 字數 2323 閱讀 7999

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語言

語言離做東西有十萬八千里,好好看幾個月的書你就能過了十萬七千裡了,再摸索個把月的編譯器,就基本能做個dd出來了,你還是先找笨書肯吧,既然是初學,別c了,c 吧,錢能老師有本 c 高階語言 清華大學出版的,我覺得還不錯的。如何學習c語言?學習方法是 1 課前預習,課後複習,認真做課堂 課後的作業,理解...

關於C語言的,關於C語言

看了下你的程式,並親自執行了一下,是沒有錯誤的,正常輸出的結果如下圖 所以對於你的 而言,可以得出一下分析結果 1 在語法 和 邏輯上都是正常的,可以正常執行並列印出結果。2 我猜測,你的這道題應該是針對 static 的練習。static定義的變數,在程式啟動時被建立,直到程式終止才被殺死,在整個...

c語言 輸入數依次從大到小排序,C語言 輸入10個數依次從大到小排序!

用陣列來存放十個數字,使用 氣泡排序 來實現排序。10個數字需進行9輪掃瞄,每次掃瞄時比較相鄰的二個數,如它們不符合要求的大小關係,就交換它們的位置。第一輪掃瞄結束時,最大的數就 沉 到最後。於是第二的範圍就少了乙個數。再進行第二兩棲型 第三輪,直到第9輪就完成了。最後輸出結果。include in...