static void getDir(const char *path) { DIR *fd; int b=0; int format = 0; int i = 0; nfiles = 0; strtok(path, "\n"); if(strcmp(path,"/")){ strcpy(files[nfiles].d_name,".."); files[nfiles].d_type = DT_DIR; sortfiles[nfiles] = files + nfiles; nfiles++; b=1; } fd = opendir(path); if (! fd) return; while(nfiles<PSP_FMGR_MAX_ENTRY){ memset(&files[nfiles], 0x00, sizeof(struct dirent)); struct dirent *file_entry = readdir(fd); if (! file_entry){ break; } memcpy(&files[nfiles], file_entry, sizeof(struct dirent)); if(files[nfiles].d_name[0] == '.'){ continue; } if(files[nfiles].d_type == DT_DIR) { strcat(files[nfiles].d_name, "/"); sortfiles[nfiles] = files + nfiles; nfiles++; continue; } sortfiles[nfiles] = files + nfiles; format = psp_fmgr_getExtId(files[nfiles].d_name); if ( (format == user_file_format ) || ((format == FMGR_FORMAT_ZIP ) && (user_file_format != FMGR_FORMAT_KBD) ) ) { nfiles++; } } closedir(fd); if(b) my_sort(sortfiles+1, 0, nfiles-2); else my_sort(sortfiles, 0, nfiles-1); }
int psp_fmgr_get_dir_list(char *basedir, int dirmax, char **dirname) { int index = 0; DIR* fd = 0; nfiles = 0; fd = opendir(basedir); if (! fd) return 0; while ((nfiles<PSP_FMGR_MAX_ENTRY) && (nfiles < dirmax)) { memset(&files[nfiles], 0x00, sizeof(struct dirent)); struct dirent *file_entry = readdir(fd); if (! file_entry) break; memcpy(&files[nfiles], file_entry, sizeof(struct dirent)); if(files[nfiles].d_name[0] == '.') continue; if(files[nfiles].d_type == DT_DIR) { strcat(files[nfiles].d_name, "/"); sortfiles[nfiles] = files + nfiles; nfiles++; continue; } } closedir(fd); my_sort(sortfiles, 0, nfiles-1); for (index = 0; index < nfiles; index++) { dirname[index] = strdup(sortfiles[index]->d_name); } return nfiles; }
void split_lines(int input){ fprintf(stderr, "C\n"); int status; int p[2]; if(pipe(p) == -1){ printf("Could not create pipe\n"); exit(1); } pid_t pid = fork(); if(pid == (pid_t)0){ dup2(input, 0); dup2(p[1], 1); close(input); close(p[0]); close(p[1]); my_sort(p[1]); if(execlp("awk", "awk", "{ for(i = 1; i<=NF; i++) { printf $i; } }", NULL) == -1){ printf("awk did not work!\n%s\n", strerror(errno)); } } else { close(p[1]); close(p[0]); wait(&status); } }
//--------------------------------------------- void Name_pairs::sort() { // check if there is anything to sort // both name and age must contain the same amount of values. if (name.size() == 0 || age.size() == 0 || name.size() != age.size()) { cout << "Warrning: Name_pairs::sort(), name or age, size is wrong."; return; } // using the sort style from the last chapter vector<string> old_names = name; // names before sort vector<double> new_ages; // new age after sort. my_sort(name); // sort name vector in alphabetical order for (unsigned int i = 0; i < name.size(); ++i) { for (unsigned int j = 0; j < old_names.size(); ++j) { if (name[i] == old_names[j]) { new_ages.push_back(age[j]); // add age to correct name j = old_names.size(); // end loop, set invariant. } } } age = new_ages; // assign the new age location }
//static void print_dir( char const *name, char const *realname, bool command_line_arg ) //Fileinfo * get_dir( char const *name ,enum Ignore_mode ignore_mode , bool recursive ) //获取指定目录下的各个信息 Fileinfo * get_dir( char const *name ) { //统计文件个数 count = 0; //读取目录 DIR *dirp; struct dirent *next; //获得目录名称 char str[256]; //定义动态数组 //存取目录文件信息 Fileinfo *file_array; //获取文件详细信息 struct stat buf; //申请动态数组首地址 file_array = (Fileinfo *)malloc( sizeof(Fileinfo) ); dirp = opendir( name ); if( !dirp ) fprintf( stderr, "lsl:cannot open directory %s.\n", name ); else { while((next = readdir( dirp )) != NULL ) { file_array = (Fileinfo *)realloc( file_array, (count + 2) * sizeof(Fileinfo)); strcpy( str, name ); strcat( str, "/" ); strcat( str, next->d_name ); //printf( "lstat file is %s\n", str); if( lstat( str, &buf ) == -1 ) my_err( "lstat",__LINE__ ); file_array[count].file_mode = buf.st_mode; file_array[count].file_nlink = buf.st_nlink; file_array[count].file_uid = buf.st_uid; file_array[count].file_gid = buf.st_gid; file_array[count].file_size = buf.st_size; file_array[count].file_mtime = buf.st_mtime; file_array[count].file_atime = buf.st_atime; file_array[count].file_ctime = buf.st_ctime; file_array[count].file_name = next->d_name; //printf( "%s\n",next->d_name ); //printf( "%s\n", file_array[count].file_name ); count++; } //printf( "Total %d file.\n", count ); } my_sort( file_array ); closedir( dirp ); return file_array; }
int main() { int m[] = { 123, 3, 0, 13212, -100 }; my_sort(std::begin(m), std::end(m)); size_t i = 0; while (i< (std::end(m) - std::begin(m))) { std::cout << m[i] << "\n"; i++; } std::vector<double> vec = { 123.0021, 3.0, 0.0, 13212.5401, -100.0 }; my_sort(vec.begin(), vec.end()); i = 0; std::cout << "\n****\nvector<double>\n****\n"; while (i< (vec.size())) { std::cout << vec[i] << "\n"; i++; } system("pause"); return 0; }
void ft_mapsort_bykey(t_map **map, int (*cmp)(const t_data *, const t_data *)) { t_map *i; t_map *j; t_map *prev; if (!map || !*map || !(*map)->next || !cmp) return ; j = *map; while (j->next) my_sort(map, &j, NULL, cmp); prev = *map; i = prev->next; while (i) { j = i; while (j->next) my_sort(&i, &j, prev, cmp); prev = prev->next; i = prev->next; } }
int main() { // allocate memory for your structure (array, stack, list, etc.) static const int MAX_LINE_COUNT = (1024 * 1024); char **line_array = (char**)malloc(sizeof(char*) * MAX_LINE_COUNT); int count = read_data(line_array); // you should replace this with your own version of sort //std::sort(&line_array[0], &line_array[count], my_less); my_sort(&line_array[0], &line_array[count], my_less); print_line_array(line_array, count); free_data(line_array, count); free(line_array); // release memory user for your structure (array, stack, list, etc.) return 0; }
void my_compute(int *pile1, int *pile2, int size, int opt) { int c; int ret; char *buf; int r[3][5]; r[0][4] = opt; my_init1(&c, r[0], size, &buf); while (++c && (r[0][3] = my_sort(pile1, r[0][1], size, -1))) { if (my_init2(pile1, pile2, r[0], r) && r[0][4] == 2) my_debug(pile1, pile2, r[0][1], r[0][2]); if ((ret = check_a(pile1, pile2, &buf, r)) == 0) return ; else if (ret == 1) continue ; if ((ret = check_b(pile1, pile2, &buf, r)) == 0) return ; } if (opt == 2) my_debug(pile1, pile2, r[0][1], r[0][2]); return (my_end(opt, c - 1, buf, **r - 1)); }
void ft_push_swap(int amt_a, int *list_a) { int *list_b; int amt_b; int moves; int i; int *res_a; i = 0; res_a = list_a; moves = 0; if (!(list_b = (int *)malloc(sizeof(int) * amt_a))) return ; amt_b = 0; if (in_order(amt_a, res_a) == 0 && amt_a >= 15) { list_b = quick_sort(list_a, list_b, amt_a, &moves); res_a = my_sort(list_b, list_a, amt_a, &moves); } else if (in_order(amt_a, res_a) == 0 && amt_a <= 15) res_a = bubble_sort(list_a, list_b, amt_a); ft_push_out(list_b); return ; }
void ColorLines::patchLine(double lambdas[3], double p1[3], double p2[3], double *img, int h, int w, int c, int min_y, int max_y, int min_x, int max_x, bool onlyPositive){ int numPx=(max_y-min_y+1)*(max_x-min_x+1); double d[numPx]; double p[c*numPx]; int ind=0; for(int i=min_y; i<=max_y; i++){ for(int j=min_x; j<=max_x; j++){ for(int k=0; k<c; k++){ p[c*ind+k]=img[c*(w*i+j)+k]; } ind++; } } ind=0; bool n_zero; for(int i=0; i<numPx; i++){ n_zero=false; for(int k=0; k<c; k++){ if(p[c*i+k]){ n_zero=true; } } if(n_zero){ for(int k=0; k<c; k++){ p[c*ind+k]=p[c*i+k]; } ind++; } } numPx=ind; double m[c]; for(int k=0; k<c; k++){ m[k]=0; } for(int i=0; i<numPx; i++){ for(int k=0; k<c; k++){ m[k]+=p[c*i+k]; } } for(int k=0; k<c; k++){ m[k]=m[k]/(double)numPx; } /*if(min_y==5 && min_x==5){ printf("%f %f %f\n", m[0], m[1], m[2]); }*/ double a[c*numPx]; for(int i=0; i<numPx; i++){ for(int k=0; k<c; k++){ a[c*i+k]=p[c*i+k]-m[k]; } } double a2[c*c]; for(int i=0; i<c; i++){ for(int j=0; j<c; j++){ a2[c*i+j]=0; for(int k=0; k<numPx; k++){ a2[c*i+j]+=a[c*k+i]*a[c*k+j]; } a2[c*i+j]=a2[c*i+j]/c; } } /*if(min_y==5 && min_x==5){ for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ printf("%f ", a2[3*i+j]); } printf("\n"); } }*/ double diag[3]; double v[3]; Matrix3d aa(3,3); EigenSolver<Matrix3d> es(aa); EigenSolver<Eigen::MatrixXd>::EigenvalueType eigenvals; EigenSolver<Eigen::MatrixXd>::EigenvectorsType eigenvecs; aa << a2[0], a2[1], a2[2], a2[3], a2[4], a2[5],a2[6],a2[7],a2[8]; eigenvals=es.eigenvalues(); eigenvecs=es.eigenvectors(); diag[0]=eigenvals(0,0).real(); diag[1]=eigenvals(1,0).real(); diag[2]=eigenvals(2,0).real(); v[0]=eigenvecs(0,2).real()*0.3; v[1]=eigenvecs(1,2).real()*0.3; v[2]=eigenvecs(2,2).real()*0.3; /*if(min_x==5 && min_y==5){ std::cout << "matriz:" << std::endl << aa << std::endl; std::cout << "eigenvalues:" << std::endl << eigenvals << std::endl; std::cout << "eigenvectors:" << std::endl << eigenvecs << std::endl; //printf("vectors: %f %f %f\nvalues: %f %f %f\n", v[0], v[1], v[2], diag[0], diag[1], diag[2]); }*/ //printf("%f %f %f\n%f %f %f\n", diag[0],diag[1],diag[2], v[0], v[1], v[2]); //calculco dos eigenvalues /*double p_val1=a2[1]*a2[1] + a2[2]*a2[2] + a2[5]*a2[5]; if(p_val1==0){ diag[0] = a2[0]; diag[1] = a2[4]; diag[2] = a2[8]; } else{ double q=(a2[0]+a2[4]+a2[8])/3.0; double p_val2 = (a2[0]-q)*(a2[0]-q)+(a2[4]-q)*(a2[4]-q)+(a2[8]-q)*(a2[8]-q)+2*p_val1; double p_val=sqrt(p_val2/6.0); double b[9]; for(int i=0; i<9; i++){ b[i]=a2[i]; } for(int i=0; i<9; i+=4){ b[i]-=q; } for(int i=0; i<9; i++){ b[i]=b[i]/p_val; } double det_b=b[0]*b[4]*b[8]+b[2]*b[3]*b[7]+b[1]*b[5]*b[6]; det_b-=b[6]*b[4]*b[2]+b[3]*b[1]*b[8]+b[7]*b[5]*b[0]; double r=det_b/2.0; double phi; if (r<=-1){ phi=M_PI/3.0; } else if(r>=1){ phi=0; } else{ phi=acos(r)/3.0; } diag[2]=q+2.0*p_val*cos(phi); diag[0]=q+2.0*p_val*cos(phi+(2.0*M_PI/3.0)); diag[1]=3.0*q-diag[2]-diag[0]; }*/ for(int i=0; i<3; i++){ p1[i]=m[i]+v[i]; p2[i]=m[i]-v[i]; } int sig[3]; for(int i=0; i<3; i++){ if(v[i]>0){ sig[i]=1; } else if(v[i]<0){ sig[i]=-1; } else{ sig[i]=0; } } if(!onlyPositive || !((sig[1]-sig[0]) || sig[2]-sig[0])){ //printf("entrou\n"); /*for(int i=0; i<3; i++){ printf("%f ", p1[i]); } printf("\n"); for(int i=0; i<3; i++){ printf("%f ", p2[i]); } printf("\n");*/ for(int i=0; i<3; i++){ v[i]=v[i]*sig[0]; p1[i]=m[i]-v[i]; p2[i]=m[i]+v[i]; } double pq[3*numPx]; for(int i=0; i<numPx; i++){ pq[3*i]=p[3*i]-p1[0]; pq[3*i+1]=p[3*i+1]-p1[1]; pq[3*i+2]=p[3*i+2]-p1[2]; } double pqxv[3*numPx]; for(int i=0; i<numPx; i++){ pqxv[3*i]=pq[3*i+1]*v[2]-pq[3*i+2]*v[1]; pqxv[3*i+1]=pq[3*i+2]*v[0]-pq[3*i]*v[2]; pqxv[3*i+2]=pq[3*i]*v[1]-pq[3*i+1]*v[0]; } double norm_v=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); for(int i=0; i<numPx; i++){ d[i]=sqrt(pqxv[3*i]*pqxv[3*i]+pqxv[3*i+1]*pqxv[3*i+1]+pqxv[3*i+2]*pqxv[3*i+2])/norm_v; } int inds[numPx]; for(int i=0; i<numPx; i++){ inds[i]=i; } my_sort(d, inds, numPx); double p_sorted[3*numPx]; for(int i=0; i<numPx; i++){ p_sorted[3*i]=p[3*inds[i]]; p_sorted[3*i+1]=p[3*inds[i]+1]; p_sorted[3*i+2]=p[3*inds[i]+2]; } numPx = 0.8*numPx+0.5; for(int k=0; k<c; k++){ m[k]=0; } for(int i=0; i<numPx; i++){ for(int k=0; k<c; k++){ m[k]+=p_sorted[c*i+k]; } } for(int k=0; k<c; k++){ m[k]=m[k]/(double)numPx; } for(int i=0; i<numPx; i++){ for(int k=0; k<c; k++){ a[c*i+k]=p_sorted[c*i+k]-m[k]; } } for(int i=0; i<c; i++){ for(int j=0; j<c; j++){ a2[c*i+j]=0; for(int k=0; k<numPx; k++){ a2[c*i+j]+=a[c*k+i]*a[c*k+j]; } a2[c*i+j]=a2[c*i+j]/c; } } /*for(int i=0; i<9; i++){ aa[i/3][i%3]=a2[i]; }*/ //printf("entrou aqui!\n"); aa << a2[0], a2[1], a2[2], a2[3], a2[4], a2[5],a2[6],a2[7],a2[8]; es.compute(aa); eigenvals=es.eigenvalues(); eigenvecs=es.eigenvectors(); diag[0]=eigenvals(0,0).real(); diag[1]=eigenvals(1,0).real(); diag[2]=eigenvals(2,0).real(); v[0]=eigenvecs(0,2).real()*0.3; v[1]=eigenvecs(1,2).real()*0.3; v[2]=eigenvecs(2,2).real()*0.3; /*if(min_x==5 && min_y==5){ std::cout << "The eigenvalues of A are:" << std::endl << eigenvals << std::endl; std::cout << "The eigenvectors of A are:" << std::endl << eigenvecs << std::endl; printf("vectors: %f %f %f\nvalues: %f %f %f\n", v[0], v[1], v[2], diag[0], diag[1], diag[2]); }*/ //printf("%.20f %.20f %.20f\n%f %f %f\n", diag[0],diag[1],diag[2], v[0], v[1], v[2]); for(int i=0; i<3; i++){ p1[i]=m[i]+v[i]; p2[i]=m[i]-v[i]; } norm_v=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); double cross_vp1[3]; cross_vp1[0]=v[1]*(-p1[2])-v[2]*(-p1[1]); cross_vp1[1]=v[2]*(-p1[0])-v[0]*(-p1[2]); cross_vp1[2]=v[0]*(-p1[1])-v[1]*(-p1[0]); //printf("%f %f %f\n", cross_vp1[0], cross_vp1[1], cross_vp1[2]); double distFromOrigin = sqrt(cross_vp1[0]*cross_vp1[0]+cross_vp1[1]*cross_vp1[1]+cross_vp1[2]*cross_vp1[2])/norm_v; lambdas[0]=diag[2]; lambdas[1]=diag[2]/(diag[1]+0.00000001); lambdas[2]=distFromOrigin; //printf("%f %.20f %f %f %f\n", diag[2], diag[1], lambdas[0], lambdas[1], lambdas[2]); for(int i=0; i<3; i++){ if(v[i]>0){ sig[i]=1; } else if(v[i]<0){ sig[i]=-1; } else{ sig[i]=0; } } if(onlyPositive && (sig[1]-sig[0]+sig[2]-sig[0])!=0){ lambdas[0]=0; lambdas[1]=0; lambdas[2]=0; } //printf("%f\n",distFromOrigin); //printf("%f %f\n",norm_v, distFromOrigin); /*for(int i=0; i<3; i++){ printf("%f ", p1[i]); } printf("\n"); for(int i=0; i<3; i++){ printf("%f ", p2[i]); }*/ /*for(int i=0; i<numClose; i++){ printf("%f %f %f\n", p_sorted[3*i],p_sorted[3*i+1],p_sorted[3*i+2]); }*? /*printf("%f\n", norm_v); for(int i=0; i<numPx; i++){ printf("%f\n", d[i]); }*/ /*for(int i=0; i<3; i++){ printf("%f ", v[i]); } printf("\n"); for(int i=0; i<3; i++){ printf("%f ", p1[i]); } printf("\n"); for(int i=0; i<3; i++){ printf("%f ", p2[i]); }*/ } else { lambdas[0]=0; lambdas[1]=0; lambdas[2]=0; } /*for(int i=0; i<3; i++){ printf("%d\n", sig[i]); }*/ /*for(int i=0; i<c; i++){ printf("%f\n", m[i]); }*/ //printf("%d\n\n", numPx); /*for(int i=0; i<c; i++){ for(int k=0; k<c; k++){ printf("%f ", a2[c*i+k]); } printf("\n"); }*/ }
int main(void){ int a[] = {9, 3, 5, 7, 1}; my_sort(a, 5); }
int main(int argc, char *argv[]) { int n = argc - 1;//size of the array int *array1 = (int*) malloc(sizeof(int)*n);//part 1 int *array2=(int*) malloc(sizeof(int)*n);//part 2 int *array=(int*) malloc(sizeof(int)*n); for (int i = 0; i < n; i++) { array[i] = atoi(argv[i+1]); } //DIVIDE IT INTO TWO PARTS: int sizeOfAr1, sizeOfAr2, i = sizeOfAr1 = sizeOfAr2 = 0; int middle_elt = array[n / 2]; while (i < n) { if (array[i] < middle_elt) { array1[sizeOfAr1] = array[i]; sizeOfAr1++; } else { array2[sizeOfAr2] = array[i]; sizeOfAr2++; } i++; } struct msg_buf myMsg; myMsg.mtype = 0; int msqid = msgget(IPC_PRIVATE, IPC_CREAT|0666); //STARTING TO PARALLELIZE int frk = fork(); if (!frk) // CHILD { my_sort(array1, sizeOfAr1, 0, sizeOfAr1); myMsg.mtype = MAGIC_NUMBER; for(int i = 0; i<sizeOfAr1;i++) { myMsg.array_element = array1[i]; msgsnd(msqid, &myMsg, sizeof(int), 0); } return 0; } else { my_sort(array2, sizeOfAr2, 0, sizeOfAr2); for(int j =0; j<sizeOfAr1;j++) { msgrcv(msqid, &myMsg, sizeof(int), MAGIC_NUMBER, 0); printf("%d ",myMsg.array_element); } for(int j =0; j<sizeOfAr2;j++) { printf("%d ",array2[j]); } printf("\n"); } return 0; }