Mercurial > hg > Game > Cerium
diff example/many_task/spe/QuickSort.cc @ 220:305ac1897c50 draft
fix
author | gongo@localhost.localdomain |
---|---|
date | Mon, 09 Feb 2009 21:58:45 +0900 |
parents | 028ffc9c0375 |
children | 56314060907f |
line wrap: on
line diff
--- a/example/many_task/spe/QuickSort.cc Mon Feb 09 00:12:40 2009 +0900 +++ b/example/many_task/spe/QuickSort.cc Mon Feb 09 21:58:45 2009 +0900 @@ -1,40 +1,67 @@ -#include "Func.h" #include "QuickSort.h" #include <stdio.h> #include <string.h> SchedDefineTask(QuickSort); +static void +check_data(DataPtr data, int length) +{ + for (int i = 0; i < length-1; i++) { + if (data[i].index > data[i+1].index) { + printf("error!!\n"); + } else { + printf("%d < %d\n", data[i].index, data[i+1].index); + } + } +} + int QuickSort::run(void* rbuff, void* wbuff) { - int begin = 0; - int end = get_param(0); - Data *r_data = (Data*)get_input(rbuff, 0); - Data *w_data = (Data*)get_output(wbuff, 0); + int begin = 0; + int end = smanager->get_param(0); + DataPtr r_data = (DataPtr)smanager->get_input(0); + DataPtr w_data = (DataPtr)smanager->get_output(0); - //printf("--\n[SPE] Quick: length:%d addr->%x \n",end, (int*)rbuff); - //printf("[SPE] Quick: data[0]: %d addr->%x\n",sizeof(r_data),r_data); - //show_data(r_data, end); + int real_start = smanager->get_param(1); + quick_sort(r_data, begin, end-1); + //check_data(r_data, end); + //bubble_sort(r_data, begin, end-1); memcpy(w_data, r_data, sizeof(Data)*end); + return 0; } void -QuickSort::quick_sort( Data *data, int begin, int end ) { +QuickSort::bubble_sort(DataPtr data, int begin, int end) +{ + for (int i = 0; i < end; i++) { + for (int j = end; j > i; j--) { + if (data[j].index < data[j-1].index) { + swap(data, j, j-1); + } + } + } +} +void +QuickSort::quick_sort(DataPtr data, int begin, int end) +{ if (begin < end) { + int where = (begin + end) / 2; int pivot = data[where].index; data[where].index = data[begin].index; int p = begin; - int i; - for (i=begin+1; i<=end; i++) { + + for (int i = begin+1; i <= end; i++) { if (data[i].index < pivot) { p++; swap(data, p, i); } } + data[begin].index = data[p].index; data[p].index = pivot; @@ -44,18 +71,9 @@ } void -QuickSort::swap( Data *data, int left, int right ) +QuickSort::swap(Data *data, int left, int right) { - int tmp = data[left].index; + int tmp = data[left].index; data[left].index = data[right].index; data[right].index = tmp; } - -void -show_data( Data *data, int size ) -{ - puts("-----------------------------------------------"); - for(int i=0; i<size; i++) printf("data[%02d].index = %d\n", i, data[i].index); - puts("-----------------------------------------------"); - return; -}