#include <stdio.h> #define MAX 255 int R[MAX]; void Heapify(int s,int m) { /*对R[1..n]进行堆调整,用temp做暂存单元 */ int j,temp; temp=R[s]; j=2*s; while (j<=m) { if (R[j]>R[j+1]&&j<m) j++; if (temp<R[j]) break; R[s]=R[j]; s=j; j=j*2; }/* end of while */ R[s]=temp; } /* end of Heapify */ void BuildHeap(int n) { /* 由一个无序的序列建成一个堆 */ int i; for(i=n/2;i>0;i--) Heapify(i,n); } void Heap_Sort(int n) { /* 对R[1..n]进行堆排序,不妨用R[0]做暂存单元 */ int i; BuildHeap(n); /* 将R[1-n]建成初始堆 */ for(i=n;i>1;i--) { /* 对当前无序区R[1..i]进行堆排序,共做n-1趟。 */ R[0]=R[1]; R[1]=R[i];R[i]=R[0]; /* 将堆顶和堆中最后一个记录交换 */ Heapify(1,i-1); /* 将R[1..i-1]重新调整为堆,仅有R[1]可能违反堆性质 */ } /* end of for */ } /* end of Heap_Sort */ void main() { int i,n; clrscr(); puts("Please input total element number of the sequence:"); scanf("%d",&n); if(n<=0||n>MAX) { printf("n must more than 0 and less than %d.\n",MAX); exit(0); } puts("Please input the elements one by one:"); for(i=1;i<=n;i++) scanf("%d",&R[i]); puts("The sequence you input is:"); for(i=1;i<=n;i++) printf("%4d",R[i]); Heap_Sort(n); puts("\nThe sequence after Big heap_sort is:"); for(i=1;i<=n;i++) printf("%4d",R[i]); puts("\n Press any key to quit..."); getch(); }
main() { char str[] = "SORTALGORITHM"; char *task_array; task_array = (char *)malloc(sizeof(char) * 30); Heap_Sort(str, strlen(str)); printf("%s", str); //create_array_data(); return 0; }
int main() { int a[100],n,i; scanf("%d",&n); for (i=0;i<n;i++) scanf("%d",&a[i]); Heap_Sort(a,n); for (i=0;i<n;i++) printf("%d ",a[i]); }
int main() { int i; ElementType a[10] = {10,9,8,7,6,5,4,3,2,1}; for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); Heap_Sort(a,10); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); printf("%d",5/2-1); return 0; }
void main(void) { int a[ARR_NUM] = {37, 41, 19, 81, 41, 25, 56, 61, 49}, i; cout << "排序前 ( before sorting ):" << endl; for (i = 0; i < ARR_NUM; i++) { cout << " " << a[i]; } Heap_Sort(a, ARR_NUM); cout << endl << "排序後 ( after sorting ):" << endl; for (i = 0; i < ARR_NUM; i++) { cout << " " << a[i]; } cout << endl; }
void MST_Kruskal(struct vertex *G,int n,int E) { int i,j; struct edge *A[n-1],*temp,*e[E]; for(i=0;i<n;i++) Make_Set(G,i); for(i=0,j=0;i<n;i++) for(temp=G[i].edgep;temp;temp=temp->next) e[j++]=temp; Heap_Sort(e,E); for(i=0,j=0;i<E;i++) if(Find_Set(G,e[i]->start)!=Find_Set(G,e[i]->destin)) { A[j++]=e[i]; Union(G,e[i]->start,e[i]->destin); } Vertex_Detail_Prim(A,j); }
int main () { printf("请输入需要排序的序列长度,最大为100:\n"); scanf("%d", &length); if (length < 0 || length > 100) printf("输入的序列长度不合法!"); printf("输入需要排序的序列:\n"); int i, j; for (i = 0; i < length; ++i) scanf("%d", &A[i]); Heap_Sort(); printf("排序之后的结果:\n"); for (i = 0; i < length; ++i) printf("%d ", A[i]); printf("\n"); }
int main() { int num; printf("请输入排序的元素的个数:"); scanf("%d",&num); int i; int *arr = (int *)malloc(num*sizeof(int)); printf("请依次输入这%d个元素(必须为整数):",num); for(i=0;i<num;i++) scanf("%d",arr+i); printf("堆排序后的顺序:"); Heap_Sort(arr,num); for(i=0;i<num;i++) printf("%d ",arr[i]); printf("\n"); free(arr); arr = 0; return 0; }
void HS() { if(T == list){ } else { Heap_Sort(tab); } }
// 정해진 정렬을 수행하고 수행 시간을 리턴해주는 함수 float do_sort(int sort_code, int* randomNum, int* bCheckExistOfNum, int number){ time_t startTime,endTime; // 함수 수행 시작시간, 종료시간 int i; float gap; // 총 함수 수행시간 switch(sort_code){ // 정렬 코드에 따라서 다른 정렬을 수행한다 //삽입 정렬의 경우 case 1: printf("난수 %d개를 생성 중입니다...\n", number); Sleep(3000); generate_random_number(randomNum, bCheckExistOfNum, number); printf("\n난수가 %d개 생성되었습니다.\n", number); Sleep(3000); printf("정렬 알고리즘을 시작합니다..\n"); startTime = clock(); insertSort(randomNum, number); endTime = clock(); printf("정렬 알고리즘이 완료되었습니다.\n"); gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산 printf("총 수행 시간 : %f초\n", gap); Sleep(3000); printf("정렬된 결과를 출력합니다.\n"); Sleep(3000); for(i = 0 ; i < number ; i++){ printf("%d ", randomNum[i]); } printf("\n정렬이 완료되었습니다.\n"); Sleep(3000); return gap; // 선택 정렬의 경우 case 2: printf("난수 %d개를 생성 중입니다...\n", number); Sleep(3000); generate_random_number(randomNum, bCheckExistOfNum, number); printf("\n난수가 %d개 생성되었습니다.\n", number); Sleep(3000); printf("정렬 알고리즘을 시작합니다..\n"); startTime = clock(); selectionSort(randomNum, number); // 선택 정렬 실행. endTime = clock(); printf("정렬 알고리즘이 완료되었습니다.\n"); gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산 printf("총 수행 시간 : %f초\n", gap); Sleep(3000); printf("정렬된 결과를 출력합니다.\n"); Sleep(3000); for(i = 0 ; i < number ; i++){ printf("%d ", randomNum[i]); } printf("\n정렬이 완료되었습니다.\n"); Sleep(3000); return gap; // 합병 정렬의 경우 case 3: printf("난수 %d개를 생성 중입니다...\n", number); Sleep(3000); generate_random_number(randomNum, bCheckExistOfNum, number); printf("\n난수가 %d개 생성되었습니다.\n", number); Sleep(3000); printf("정렬 알고리즘을 시작합니다..\n"); startTime = clock(); mergeSort(randomNum, 0, number); // 합병 정렬 실행. endTime = clock(); printf("정렬 알고리즘이 완료되었습니다.\n"); gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산 printf("총 수행 시간 : %f초\n", gap); Sleep(3000); printf("정렬된 결과를 출력합니다.\n"); Sleep(3000); for(i = 0 ; i < number ; i++){ printf("%d ", randomNum[i]); } printf("\n정렬이 완료되었습니다.\n"); Sleep(3000); return gap; // 힙 정렬의 경우 case 4: printf("난수 %d개를 생성 중입니다...\n", number); Sleep(3000); generate_random_number(randomNum, bCheckExistOfNum, number); printf("\n난수가 %d개 생성되었습니다.\n", number); Sleep(3000); printf("정렬 알고리즘을 시작합니다..\n"); startTime = clock(); Heap_Sort(randomNum, number); // 힙 정렬 실행. endTime = clock(); printf("정렬 알고리즘이 완료되었습니다.\n"); gap=(float)(endTime-startTime)/(CLOCKS_PER_SEC); //계산 printf("총 수행 시간 : %f초\n", gap); Sleep(3000); printf("정렬된 결과를 출력합니다.\n"); Sleep(3000); for(i = 0 ; i < number ; i++){ printf("%d ", randomNum[i]); } printf("\n정렬이 완료되었습니다.\n"); Sleep(3000); return gap; } }