디시인사이드 갤러리

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

갤러리 본문 영역

스레드 질문좀 드릴께요

아잉만두갤로그로 이동합니다. 2011.10.11 23:56:07
조회 55 추천 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 - -
293009 언제부터인가 지구에 2개의 태양이 뜬다. [5] 거칠게갤로그로 이동합니다. 11.12.07 116 0
293008 M본부는 걍 문 닫아야 할 듯 [1] 분당살람갤로그로 이동합니다. 11.12.07 93 0
293007 와 피곤해 [2] 이모군(175.114) 11.12.07 76 0
293006 html5 + php 배워서 웹커뮤니티 하나 만들려면 많이 오래걸리나요? [3] ,.(216.172) 11.12.07 145 0
293004 형들 자바에서 현재창 닫게하는 메소드 뭐야 ㅠㅠ....찾아도 안나와 ㅠㅠ [3] 여로보암갤로그로 이동합니다. 11.12.07 84 0
293003 레알 뿌리깊은나무.JPG [2] ㅇㅇㅇ(121.144) 11.12.07 171 0
293002 모바일 앱개발 프로그래머 급하게 구합니다~!! [9] (주)앱프리(218.152) 11.12.07 197 0
293001 구글에서도 스마트 TV 출시한다는데..... 거칠게갤로그로 이동합니다. 11.12.07 44 0
293000 비베 DateTimePicker 널값주는법 아시나요? ㅠㅠ [1] Sayrin갤로그로 이동합니다. 11.12.07 76 0
292999 코딩덕후?프로그래머형들한테 물어볼게 [2] HaCh갤로그로 이동합니다. 11.12.07 129 0
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
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2