私は以下のCコードのクイックソートアルゴリズムを持っています。Big O QuickSortアルゴリズムで反復をトレースする方法は? C
#include <stdio.h>
#include <stdbool.h>
int list[] = {8, 1, 3, 4, 2, 10, 4, 6};
//int list[] = {2, 1, 10, 4, 5, 11, 12, 6};
//int list[] = {35, 33, 42, 10, 14, 19, 27, 44, 26, 31};
int main(int argc, char **argv)
{
printf("Unsorted list is: ");
printArray(list);
quickSort(0, 7);
printf("Sorted list is: ");
printArray(list);
return 0;
}
int partition(int left, int right, int pivot){
int leftPointer = left -1;
int rightPointer = right;
while(true){
while(list[++leftPointer] < pivot){
//do nothing
// printf("proses index kiri %d\n", leftPointer);
}
while(rightPointer > 0 && list[--rightPointer] > pivot){
//do nothing
// printf("proses index kanan %d\n", rightPointer);
}
if(leftPointer >= rightPointer){
break;
}else{
printf("item swapped :%d,%d\n",
list[leftPointer],list[rightPointer]);
swap(leftPointer, rightPointer);
// return;
// left++;
// right--;
}
}
printf("pivot swapped :%d,%d\n", list[leftPointer],list[right]);
swap(leftPointer, right);
printf("pivot index %d\n", leftPointer);
return leftPointer;
}
void quickSort(int left, int right){
if(right - left <= 0){
return;
}else{
int pivot = list[right];
int pIndex = partition(left, right, pivot);
quickSort(left, pIndex-1);
quickSort(pIndex+1, right);
// printf("aman lanjut proses");
}
}
void printArray(int list[]){
int i;
for(i = 0; i < 8; i++){
printf(" %d ", list[i]);
}
printf("\n\n");
}
void swap(int left, int right){
//variabel sementara untuk menampung i
int temporary = list[left];
//tukar posisi, sehingga yg kecil di kiri, yg besar di kanan.
list[left] = list[right];
list[right] = temporary;
}
ここで、繰り返し(トレース)のステップを示すために「printf」を挿入する必要がありますか?
Big O表記の複雑さは、現在のデータでチェック/カウントしたいのですから。最高、平均、または最悪の場合を満たす。
ブロック内でprintf( "trace");を2の内側に置くと、結果として "trace"が9個あります。 複雑さはO(8 log 8)ですか? N =合計アイテム。 –
@DarkCyberいいえ、あまりありません。 O(8 log8)は単なる定数です。 8つの値、次に9つの値、10の値などを実行すると、それぞれの場合に印刷枚数がカウントされます.n logn(平均的な場合)のような関数が得られます。 。 –