디시인사이드 갤러리

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

갤러리 본문 영역

스레드 질문좀 드릴께요

아잉만두갤로그로 이동합니다. 2011.10.11 23:56:07
조회 54 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 힘들게 성공한 만큼 절대 논란 안 만들 것 같은 스타는? 운영자 24/06/10 - -
292998 방금 면접 1개 끝나고 뭐할까 하다가 겜방왔어요. [3] 좋은아버지갤로그로 이동합니다. 11.12.07 111 0
292997 헬지가 결국 무리수를 두는구나........ [1] 거칠게갤로그로 이동합니다. 11.12.07 180 0
292996 애플 TV 기대된다 +ㅁ+ [1] 거칠게갤로그로 이동합니다. 11.12.07 84 0
292995 강병수라는 프로그래머 아시는분있으신가요? 프로그래머(211.114) 11.12.07 66 0
292994 비베 질문좀 드릴게여.. [17] Sayrin갤로그로 이동합니다. 11.12.07 126 0
292993 프로그램에서 특정값 빼오는거 어케하나요 [4] qwe(203.252) 11.12.07 91 0
292992 Audaces 라는 캐드프로그램 아는사람? 최창식(59.30) 11.12.07 116 0
292991 그나저나 왜이래 디시서버 또 이질아이양 ㄹㄹㄷㄹㄷㄹ(219.255) 11.12.07 59 0
292989 아이폰 앱 만들어 파는 횽들 있나여??? 거칠게갤로그로 이동합니다. 11.12.07 58 0
292988 형들 유명프로그래머 알려주세용 [10] 5공입갤갤로그로 이동합니다. 11.12.07 189 0
292987 횽들 c언어 동적 메모리 배열 할당에대해서 답변좀 [2] ㅈㅈㅅㅂ(121.191) 11.12.07 116 0
292986 김12유123식 씨팔 자본주의의 노예 새꺄!!!! -ㅂ-(210.90) 11.12.07 64 0
292983 게임기와 스마트폰의 디바이스 측면만봣을땐 싴보이갤로그로 이동합니다. 11.12.07 44 0
292982 연봉 협상할때 자세 질문좀 4(125.7) 11.12.07 82 0
292981 디씨 어떤 병신이 코드 건드렸나 댓글 왜이럼 4(125.7) 11.12.07 60 0
292978 요새 너무 고민중이다 ... [4] 싴보이갤로그로 이동합니다. 11.12.07 97 0
292977 덕짤은 아니고 이쁜짤 ㅋㅋ [6] 쿄스케갤로그로 이동합니다. 11.12.07 131 0
292976 프로그래머 2년하니까 프로그래머 가 눈에 보인다 4(125.7) 11.12.07 136 0
292973 중국집에서뭐사먹을까?? [4] 이건산전갤로그로 이동합니다. 11.12.07 52 0
292972 정오의 데이트 같은 프로그램이 대용량 서버를 필요로 하나? 이메지네이션(114.205) 11.12.07 53 0
292971 laglange보간법을 사용해서 sinx를 (0,파이/2)까지 포트란시발(211.223) 11.12.07 205 0
292970 디씨 존나 이상해 진듯 [1] 1(121.182) 11.12.07 78 0
292969 나 오늘 면접 2개인데 이제 보러가 좋은아버지갤로그로 이동합니다. 11.12.07 46 0
292968 C++언어 질문점.......... [2] ㄷㅂㄴㅁㅍ(210.125) 11.12.07 68 0
292966 수닥덕 System32갤로그로 이동합니다. 11.12.07 61 0
292965 아래 일러스트 구할수 있는 사이트 웃기다... 디자이너한테 돈을 받네;; [1] 쿄스케갤로그로 이동합니다. 11.12.07 104 0
292964 좆같은 리눅스 [3] ㅁㄴㄻㄹ갤로그로 이동합니다. 11.12.07 99 0
292963 형들 C언어 질문좀받아주세요.(파일 입출력) [1] --(175.116) 11.12.07 60 0
292962 카오스 온라인 리뷰 [10] McHello갤로그로 이동합니다. 11.12.07 191 0
292961 으아 내일이다 [1] +어게인갤로그로 이동합니다. 11.12.07 73 0
292960 IT프로그래머의 점심은 파스타라는게 진짜인가여? 므해?갤로그로 이동합니다. 11.12.07 91 0
292959 오 무료로 괜찮은 일러스트 구할수 있는 사이트! [1] 쿄스케갤로그로 이동합니다. 11.12.07 247 0
292958 악 ㅋㅋ 이미지 사는거 엄청 비싸네 ㅋㅋㅋ [10] 쿄스케갤로그로 이동합니다. 11.12.07 154 0
292957 으어 술이 안깬다 -ㅁ- 외계달팽갤로그로 이동합니다. 11.12.07 53 0
292954 Objective C 다루는게 목표라면 C열강만 보고 바로 넘어가도 될까 [1] 컴싸(118.176) 11.12.07 68 0
292953 뭐가 문제지..... [2] 슈우과학갤로그로 이동합니다. 11.12.07 55 0
292952 묵직한 돌직구 [3] 샘숭(125.138) 11.12.07 145 0
292951 아버지가_프로그래머.jpg [3] Aven갤로그로 이동합니다. 11.12.07 332 0
292950 과메기의 계절임.. 이문동쮸쮸바갤로그로 이동합니다. 11.12.07 70 0
292949 형들 도와주세요... 컴퓨터공학 전공 관련 글을 A4 5장 써야 합니다. [6] 형들...(59.23) 11.12.07 116 0
292948 비주얼베이직 쌩기초질문.. 도와줘흉들아ㅠㅜ [1] (122.254) 11.12.07 51 0
292946 그젛게 밤새서 어제 저녁 7시에 잣는데 좋은아버지갤로그로 이동합니다. 11.12.07 65 0
292945 아 자야하는데 하고 싶은 건 많고 시간은 벌써 두 시고 ㅁㄴㄻㄹ갤로그로 이동합니다. 11.12.07 45 0
292944 우분투 11.10 이 11.04보다 더 느리다면서? [2] 구루구루(119.64) 11.12.07 151 0
292941 횽들 이거 하루종일 뒤졌는데 도저히 모르겠어 ㅠㅠ 제발좀 알려줘.. 사학년(222.107) 11.12.07 44 0
292939 형들 앞으로 휴대용게임기 어떻다고봄? [5] ㅎㅎ(61.106) 11.12.07 78 0
292938 시발 타이핑하기 귀찮다... [2] ㅈㅂㄷㅂㄷ(220.78) 11.12.07 50 0
292937 emacs aborted?? 관련 질문입니다. 잉여잉간 (110.76) 11.12.07 38 0
292934 오빠들도와주세융 비쥬얼베이직 [4] 쉭키갤로그로 이동합니다. 11.12.07 115 0
292933 존나 개초보적인 질문인데 이해가 잘안되서요 완전이진트리랑 이진트리랑 차이 [14] Rapidly갤로그로 이동합니다. 11.12.07 168 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2