因為我是學java的,所以c++的語法很多看不懂^^"
像setw,<<,end1,const,cout之類的
煩請大家解釋一下,這是有關quicksort的,感謝各位
#include
#include
#include
#include
const int ARR_SZ = 10;
void iterative_quick(int A[],int size);
int partition(int A[],int first,int last);
void swap(int& a,int& b);
void display_array(int A[],int size,char message[]);
void main()
{
srand((unsigned int)time(NULL));
int A[ARR_SZ];
for (int i=0; i < ARR_SZ; ++i)
A[i] = rand() % 100;
display_array(A,ARR_SZ,"Random array:");
iterative_quick(A,ARR_SZ);
display_array(A,ARR_SZ,"Sorted array:");
}
void iterative_quick(int A[],int size)
{
int first=0,last=size;
int left_pending[ARR_SZ],right_pending[ARR_SZ],top=0;
do {
if (top >0)
{
top--;
first = left_pending[top];
last = right_pending[top];
}
while (first < last)
{
int pivot =partition(A,first,last);
left_pending[top] = pivot + 1;
right_pending[top] = last;
top++;
last = pivot - 1;
}
} while (top > 0);
}
int partition(int A[],int first,int last)
{
int pivot = A[first];
int left = first + 1,
right = last;
do {
while (left <= right && A[left] <= pivot)
++left;
while (left <= right && A[right] > pivot)
--right;
if (left < right)
swap(A[left],A[right]);
} while (left <= right);
swap(A[first],A[right]);
return right;
}
void swap(int& a,int& b)
{
int temp = a;
a = b;
b = temp;
}
void display_array(int A[],int size,char message[])
{
const int NUM_COLS = 10;
cout << endl << message << endl;
for (int i=0; i < ARR_SZ; ++i)
{
cout << setw(5) << A[i];
if ((i + 1) % NUM_COLS == 0)
cout << endl;
}
cout << endl;
}
2006-11-09 20:38:58 · 1 個解答 · 發問者 ? 1 in 電腦與網際網路 ➔ 程式設計
quick sort 是一種 algorithm, 與語言無關。我只解釋 C++ 語法的部份。您要是對 Quick Sort 本身有疑問,可以去看任一何 general 的 Algorithm 的書,一定會介紹。setw 設定(x)寬度為 x 字元cout 印出endl end Line, 不是 end one!!!就是換列。 但它與換列 ("\n") 不同處,在於 endl 除了 "\n" 外,會加上 flash 的動作(把 buffer裡的東東最快速印出)。<< 印出的東東一個一個列出之間要加上的 Operator所以,cout << endl << message << endl 是說:印出換列、訊息變數(message)裡的內容,換列,立刻印出。其它除了 pointer 以外,和 Java 應該都差不多。看不懂的地方再問。^_^
2006-11-10 15:12:43 補充:
Quick sort 很重要,發明人C. A. R. Hoare得過〝電腦的諾貝爾獎〞:Intel出資的ACM Turing Award。
Hoare現在在微軟顧〝門〞。
我碩士的committee很推崇他。
它是average case達到NlogN的三個內部排序裡最快的!
因為它的程式容易對應到機器擅長的碼,且O()隱藏的係數最小。
要學好程式設計,Quick Sort 一定要好好研究一下。
2006-11-09 22:54:07 · answer #1 · answered by ? 7 · 0⤊ 0⤋