同学让帮忙做的~~ 4种排序公用一个数组~~~使用互斥量防止访问冲突~~ #include <windows.h> #include <tchar.h> #include <iostream> using namespace std; const int N=12; static int arr[12]={12,50,60,87,98,50,15,31,32,79,21,10}; HANDLE hMutex;//互斥量句柄 int data[N]; void Show(int data[],int n) { for(int i=0;i<n;i++) cout<<data[i]<<"/t"; cout<<"/n"<<endl; }; void QuickSort(int _data[],int low,int high)//快速排序 { for(int i=0;i<N;i++) data[i]=_data[i]; int i,pivot,j; if(low<high) { pivot = data[low];i=low;j=high; while(i<j) { while(i<j&&data[j]>=pivot) j--; if(i<j) data[i++]=data[j]; while (i<j&&data[i]<=pivot) i++; if(i<j) data[j--]=data[i]; } data[i]=pivot; QuickSort(data,low,i-1); QuickSort(data,i+1,high); } }; void MaoPaoSort(int data[])//冒泡排序 { int list[N]; for(int i=0;i<N;i++) list[i]=data[i]; int j=1,temp; while((j<N)) { for(int i=0;i<N-j;i++) { if(list[i]<list[i+1]) { temp = list[i]; list[i] = list[i+1]; list[i+1] = temp; } } j++; } cout<<"MaoPao"; Show(list,N); }; void SortChoice(int data[])//选择排序 { int list[N]; for(int i=0;i<N;i++) list[i]=data[i]; int min; for(int i=0;i<N-1;i++) { min=i; for(int j=i+1;j<N;j++) { if(list[j]<list[min]) min=j; } int t=list[min]; list[min]=list[i]; list[i]=t; } cout<<"Choice:"; Show(list,N); }; void SortInsert(int data[])//插入排序 { int list[N]; for(int i=0;i<N;i++) list[i]=data[i]; for(int i=1;i<N;i++) { int t=list[i]; int j=i; while((j>0)&&(list[j-1]<t)) { list[j]=list[j-1]; --j; } list[j]=t; } cout<<"Insert:"; Show(list,N); }; void SortShell(int data[])//希尔排序 { int list[N]; for(int i=0;i<N;i++) list[i]=data[i]; int inc; for(inc=1;inc<=N/9;inc=3*inc+1); for(;inc>0;inc/=3) { for(int i=inc+1;i<=N;i+=inc) { int t=list[i-1]; int j=i; while((j>inc)&&(list[j-inc-1]>t)) { list[j-1]=list[j-inc-1]; j-=inc; } list[j-1]=t; } } cout<<"Shell:"; Show(list,N); }; //线程函数 DWORD WINAPI Fun1Proc(LPVOID lpParameter) { WaitForSingleObject(hMutex,INFINITE); SortShell(arr); ReleaseMutex(hMutex); Sleep(1000); return 0; } DWORD WINAPI Fun2Proc(LPVOID lpParameter) { WaitForSingleObject(hMutex,INFINITE); MaoPaoSort(arr); ReleaseMutex(hMutex); Sleep(1000); return 0; } DWORD WINAPI Fun3Proc(LPVOID lpParameter) { WaitForSingleObject(hMutex,INFINITE); SortChoice(arr); ReleaseMutex(hMutex); Sleep(1000); return 0; } DWORD WINAPI Fun4Proc(LPVOID lpParameter) { WaitForSingleObject(hMutex,INFINITE); SortInsert(arr); ReleaseMutex(hMutex); Sleep(1000); return 0; } int main(int argc,char *argv[]) { //主线程开始 QuickSort(arr,0,11); Show(data,12); Sleep(2000); HANDLE hThread1,hThread2,hThread3,hThread4;//线程句柄 //创建线程 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); hThread3=CreateThread(NULL,0,Fun3Proc,NULL,0,NULL); hThread4=CreateThread(NULL,0,Fun4Proc,NULL,0,NULL); //关闭线程句柄 CloseHandle(hThread1); CloseHandle(hThread2); CloseHandle(hThread3); CloseHandle(hThread4); //创建互斥对象 hMutex=CreateMutex(NULL,true,NULL);//true为主线程拥有互斥量,false为当前没有线程拥有互斥量 //释放线程对象 ReleaseMutex(hMutex); cin.get(); return 0; }