English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

因為我是學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 電腦與網際網路 程式設計

1 個解答

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

fedest.com, questions and answers