Ejemplo n.º 1
0
Archivo: 47.c Proyecto: 13436120/Cgames
#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();
	
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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]);
}
Ejemplo n.º 4
0
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;
} 
Ejemplo n.º 5
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;
}
Ejemplo n.º 6
0
Archivo: MST.c Proyecto: mdilshad/DSA
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;
}
Ejemplo n.º 9
0
 void HS() { if(T == list){  } else { Heap_Sort(tab); } }
Ejemplo n.º 10
0
// 정해진 정렬을 수행하고 수행 시간을 리턴해주는 함수 
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;
	}
}