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;
-}