디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

스레드 질문좀 드릴께요

아잉만두갤로그로 이동합니다. 2011.10.11 23:56:07
조회 60 추천 0 댓글 3

제가 만들려고 하는 소스가 처음에 n을 입력하면 n만큼 스레드를 만들고 배열에 무작위 수를 입력한다음에 정렬하는 함수인데

가끔씩 정렬이 안되거나 이상하게 될때도 있고 큰 수를 입력할때는 정렬이 안되는데 코드를 올려볼테니 조금 봐주세요 나름 주석도 달았습니다.

#include<stdio.h>
#include<windows.h>
#include<tchar.h>
#include<time.h>
#define MAX_THREADS (10)
DWORD *arr;
DWORD num; //배열을 스레드의 수만큼 나누기 위한 기준
DWORD WINAPI ThreadProc(LPVOID lpParam); //스레드에서 돌아갈 함수 선언
DWORD partition(DWORD,DWORD); //퀵소트에서 피봇값을 정해서 위치를 리턴해주는 함수
void quicksort(DWORD,DWORD); //분할하고 정렬하는 함수
void merge(DWORD,DWORD,DWORD); //부분별로 정렬된 배열을 합치는 함수
int _tmain(int argc,TCHAR *argv[]){
 srand((unsigned)time(NULL)); //배열에 임의의 숫자를 지정해주기 위해서
 DWORD cnt=0;
 DWORD *ThreadID;
 HANDLE *hThread;
 int n,j;
 float start,end,time_data;
 DWORD Result=0;
 scanf("%d",&n); // 스레드의 갯수 입력
 ThreadID=(DWORD*)malloc(sizeof(DWORD)*n);  //입력한 숫자 n만큼 스레드 ID 동적할당
 hThread=(HANDLE*)malloc(sizeof(HANDLE)*n); //입력한 숫자 n만큼 스레드의 핸들 동적할당
 arr=(DWORD*)calloc(101,sizeof(int));    //배열 동적할당
 for(j=1;j<101;j++) arr[j]=rand()%10000001; //배열에 임의의 수 대입
 num=101/n;
 printf("%d\\n",num);
 start=GetTickCount(); //동작시간을 재귀위한 첫 시작점
 while(1){
  if(cnt == n) break;
  hThread[cnt] =
  CreateThread(
   NULL,0,ThreadProc,
   (LPVOID)cnt,
   0,
   &ThreadID[cnt]);
   cnt++;
 }   
 // 스레드 만드는 과정
 for(DWORD i=0; i<n; i++)
 {
 GetExitCodeThread(hThread[i],&Result);
 CloseHandle(hThread[i]);
 }
 // 스레드가 모든 작업을 마치고 끝냄
 for (DWORD i=0;i<n-1;i++) merge(1,(i+1)*num,(i+2)*num); //부분적으로 정렬된 배열을 하나로 합치면서 정렬하는 작업
 end=GetTickCount(); //동작시간의 끝나는 점
 time_data=end-start;
 printf("%f\\n",time_data/1000); //동작시간 출력
 for(j=1;j<101;j++) printf("%d ",arr[j]);
 printf("\\n");
 return 0;

DWORD WINAPI ThreadProc(LPVOID lpParam){
 DWORD n,start,end;
 n=(DWORD)lpParam;
 start=n*num+1;
 end=(n+1)*num;
 quicksort(start,end);
 return *arr;
 }
DWORD partition(DWORD start,DWORD end)
{
 DWORD x,i,j,temp;
 x=arr[end];
 i=start-1;
 for(j=start;j<end;j++)
 {
  if(arr[j]<=x)
  {
   i++;
   temp=arr[i];
   arr[i]=arr[j];
   arr[j]=temp;
  }
 }
 temp=arr[i+1];
 arr[i+1]=arr[end];
 arr[end]=temp;
 return i+1;
}
void quicksort(DWORD start,DWORD end)
{
 DWORD q;
 if(start<end)
 {
  q=partition(start,end);
  quicksort(start,q-1);
  quicksort(q+1,end);
 }
}
void merge(DWORD start,DWORD mid,DWORD end)
{
 DWORD i,j,t,*tmp;
 tmp=(DWORD*)malloc(sizeof(DWORD)*(end-start+1));
 i=start;
 j=mid+1;
 t=0;
 while(i<=mid&&j<=end){
  if(arr[i]<=arr[j]){
   tmp[t]=arr[i];
   t++;
   i++;
  }
  else{
   tmp[t]=arr[j];
   t++;
   j++;
  }
 }
 while(i<=mid){
  tmp[t]=arr[i];
  t++;
  i++;
 }
 while(j<=end){
  tmp[t]=arr[j];
  t++;
  j++;
 }
 i=start;
 t=0;
 while(i<=end)
 {
  arr[i]=tmp[t];
  i++;
  t++;
 }
 free(tmp);
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
412569 그깟거 공부하면 되지. 자꾸 묻는 애들 한심해. 허세갑(175.223) 14.03.15 50 0
412568 프로그래밍 언어는 어떻게 만듦? c나 java 파이썬 같은 거 11(121.64) 14.03.15 61 0
412567 HLSL Pixel Shader 2.0에서 픽셀 위치 잡기 TerNer(119.193) 14.03.15 53 0
412566 여고생이 좋다 x [1] 요미코치료사(59.17) 14.03.15 97 0
412565 자신을 추상화시키고 남을 뭉개려 들다니... 허세갑(175.223) 14.03.15 37 0
412564 형들 자바 공부 시작을 어떻게 해야할까? [1] 호랑이(1.244) 14.03.15 94 0
412563 현업자를 보고 배우자 허세갑(175.223) 14.03.15 41 0
412561 오늘 예쁜 여교수 나오는 꿈을 다시 꿨다 [1] 에어로홍갤로그로 이동합니다. 14.03.15 94 0
412560 (number & 1) == 0 이게 뭐냐? [1] 3(47.16) 14.03.15 95 0
412558 C나 C++의 EBNF만들어줄 게이있냐? 이웃집힘법사갤로그로 이동합니다. 14.03.15 83 0
412556 형들 학교숙제인데 도와줘요 [2] blue(39.116) 14.03.15 88 0
412555 NGC 우주라이브방송 이웃집힘법사갤로그로 이동합니다. 14.03.15 66 0
412554 호들갑떨다가 제대로 망한 류 [1] 이웃집힘법사갤로그로 이동합니다. 14.03.15 116 0
412553 대학교수나 연구원같은거 하려면 어느 루트가 빠를까 [2] 이웃집힘법사갤로그로 이동합니다. 14.03.15 114 0
412552 프갤보니 암울하네. [2] 1321(118.37) 14.03.15 85 0
412551 왜 함수의 역으로는 값을 얻지 못하냐 [4] 이웃집힘법사갤로그로 이동합니다. 14.03.15 161 0
412550 가끔 게임개발을 하면서 좌절감과 열등감느낄때가많다.. [3] 1(114.201) 14.03.15 209 0
412549 게임프로그래머에게 필요한 수학실력은? [3] (114.201) 14.03.15 215 0
412548 천재신입 [10] 123(112.158) 14.03.15 236 0
412547 근데 대졸자들 프로그래밍실력이 어느정도야? [8] a(114.201) 14.03.15 231 0
412546 압후롣쟐방슬ㅇl릗스묘늬곧소ㅇF즤 호석갤로그로 이동합니다. 14.03.15 79 0
412545 으앙ㄴH싄ㅅHㅇFㅠ 호석갤로그로 이동합니다. 14.03.15 32 0
412544 부로잭두ㅇr낙흳소본ㅅrㄹr믿소¿ 호석갤로그로 이동합니다. 14.03.15 56 0
412543 솔직히 프로그래머 신세한탄을 왜하는거냐? [9] 123(114.201) 14.03.15 227 0
412542 으앙ㅈF믜ㅇr놔ㅠ 호석갤로그로 이동합니다. 14.03.15 39 0
412541 와 씨발 버그해결의 맛이란; [5] 3(114.201) 14.03.15 193 0
412540 안드로이드 초급 질문좀.. ㅇㅇ(123.109) 14.03.15 53 0
412536 서블릿관련 질문드립니다.. [1] asdf(211.49) 14.03.15 63 0
412534 씨발새끼야 배고픈데 편의점가서 김밥사먹을까? [1] 123(112.158) 14.03.15 75 0
412532 으이구... 최티모(175.223) 14.03.15 66 0
412529 오늘도 프갤은 평화롭다. [3] 굴래방다리밑(218.38) 14.03.15 67 0
412527 씨발썌끼들아 php질문한다 [6] 123(112.158) 14.03.15 142 0
412525 ㅅHㄴrㄹrㅇH오릐늬눙일즥의로남늬ㄷr [3] 호석갤로그로 이동합니다. 14.03.15 91 0
412524 개썌기들아 jsp 소스 못숨기냐? [5] 123(112.158) 14.03.15 193 0
412522 ㅎr고ㄴH솓ㅅlㅂH우묜소ㅇlㅎHㄱr앙댇돈ㄱH... 호석갤로그로 이동합니다. 14.03.15 35 0
412521 c++ 2010 익스버전 다운이 자꾸 안됨 [1] 999(27.119) 14.03.15 56 0
412520 내홈페이지해킹해바라 [3] 123(112.158) 14.03.15 211 0
412519 노업 에어로홍갤로그로 이동합니다. 14.03.15 33 0
412517 가츨 여고생 재워주고 싶다 [4] 에어로홍갤로그로 이동합니다. 14.03.15 324 0
412516 자바로 간단한 데이터베이스 프로그램 만들수 있냐? [2] 네이트(117.55) 14.03.15 201 0
412515 프로ㅛ그래머생김새가 [3] 고1(39.121) 14.03.15 143 0
412514 3년차 si다 [3] 필지분상승갤로그로 이동합니다. 14.03.15 168 0
412513 실시간 데이터가 뜨는 프로그램은 웹을 만들어야 되냐? [1] 네이트(117.55) 14.03.15 76 0
412512 애새끼들아 cocos-x 시작하세요 워키북스 3월14일날 발매된거사지마라 [3] 123(112.158) 14.03.15 152 0
412511 jsp로 홈페이지만들려면 뭐써야하나? [7] 123(112.158) 14.03.15 120 0
412510 배열부터 머리 터지나 [2] 고1임ㅋ야자씨ㅜ부2랄(39.121) 14.03.15 64 0
412509 서버컴퓨터는 24시간 틀어놔야되? [6] spdlxm(117.55) 14.03.15 164 0
412508 형들 c++질문좀할게 [1] qwe123(175.214) 14.03.15 155 0
412507 랜더링프로그램추천좀 [1] pastisinthepast갤로그로 이동합니다. 14.03.15 63 0
412506 질문한다 [3] c언어(175.214) 14.03.15 70 0
뉴스 [집 나가면 개호강] ‘스카이개슬 1타(?)’ 강소라VS조한선, 불꽃 신경전! 눈 가리고 ‘아웅’ 승부…세기의 대결!  디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2