⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nbpx.txt

📁 对十种内部排序的比较.有直接排序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
				(*CmpNum)++;
                for(int j=last; temp[j]>L->r[i].key; j--) 
				{
				    (*CmpNum)++;
                    temp[j+1]=temp[j]; 
				}
                temp[j+1]=L->r[i].key; //插入待插元素         
                last++;   
			} 
			
		}
        //复制回原数组
        if(first<last)
            for(i=0; i<MAXSIZE; i++) 
			{
			L->r[i].key=temp[i];
				(*ChgNum)++;
			}
        else 
			{
			    for(i=first; i<=MAXSIZE; i++) 
				{
					L->r[i-first].key=temp[i];
						(*ChgNum)++;
				}
                for(i=0; i<=last; i++) 
				{
					L->r[MAXSIZE-first+i].key=temp[i]; 
						(*ChgNum)++;
				}
			}
	

      }


void SelectSort(){
  printf("1. 插入排序\n");
  printf("2. 希尔排序\n");
  printf("3. 快速排序\n");
  printf("4. 堆排序\n");
  printf("5. 冒泡排序\n");
  printf("6. 选择排序\n");
  printf("7. 折半插序\n");
  printf("8. 归并排序\n");
  printf("9. 基数排序\n");
  printf("10. 2-路插入排序\n");
  printf("11. 以上所有排序方式\n");
  printf("12. 退出程序\n\n");
  printf("Please Select the Operate:");
}

void AllAbove(LinkList *L, int *CmpNum, int *ChgNum){
  int i;
  
  int dlta[3] = {
    7, 3, 1
  };
  int Indata[1] = {
    1
  };
  
  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n插入排序:\n");
  
  ShellSort(L, Indata, 1, &CmpNum[0], &ChgNum[0]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[0], ChgNum[0]);
  
     
  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n希尔排序:\n");
  
  ShellSort(L, dlta, 3, &CmpNum[1], &ChgNum[1]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[1], ChgNum[1]);
  
  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n快速排序:\n");
  
  QuickSort(L, &CmpNum[2], &ChgNum[2]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[2], ChgNum[2]);
  

  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n堆排序:\n");
  
  HeapSort(L, &CmpNum[3], &ChgNum[3]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[3], ChgNum[3]);
 

  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n冒泡排序:\n");
  
  BubbleSort(L, &CmpNum[4], &ChgNum[4]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[4], ChgNum[4]);
  
  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n选择排序:\n");
  
  SelSort(L, &CmpNum[5], &ChgNum[5]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[5], ChgNum[5]);
 

   for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n折半排序:\n");
  
  BInsertSort(L, &CmpNum[6], &ChgNum[6]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[6], ChgNum[6]);
 

   for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n归并排序:\n");
  
  MergeSort(L, &CmpNum[7], &ChgNum[7]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[7], ChgNum[7]);
 

  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n基数排序:\n");
  
  RadixSort(L, &CmpNum[8], &ChgNum[8]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[8], ChgNum[8]);
 

  for (i = 1; i <= MAXSIZE; i++)
    L->r[i].key = RandArray[i];				//随机数列复位
  printf("\n2-路插入排序:\n");
 
  InsertSortBinary(L, &CmpNum[9], &ChgNum[9]);
  
  printf("\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[9], ChgNum[9]);
 
}
void main(){
  int i,j;
  int select = 0;
  int dlta[3] = {7, 3, 1};
  int Indata[1] = {1};
  int CmpNum[12], ChgNum[12];
  LinkList L;
  InitLinkList(&L);
  Display(&L);
   FILE *f2;
  
  
  memset(CmpNum, 0, sizeof(CmpNum));
  memset(ChgNum, 0, sizeof(ChgNum));
  do{
    SelectSort();
    for (i = 0; i < MAXSIZE; i++)
      L.r[i].key = RandArray[i];				//随机数列复位
    scanf("%d", &select);
    switch (select){
      case 1:
        printf("\n插入排序:\n");
		
        ShellSort(&L, Indata, 1, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL)
		{
    printf("can't open file\n");
    exit(0);
		}
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
             
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
      fprintf(f2, "\n插入排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
        fclose(f2);
        break;
      case 2:
        printf("\n希尔排序:\n");
        
        ShellSort(&L, dlta, 3, &CmpNum[select], &ChgNum[select]);
       if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
   		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
            
			if(++j%10==0)printf("\n");
		}
		printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select] );
         fprintf(f2, "\n希尔排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
      case 3:
        printf("\n快速排序:\n");
        
        QuickSort(&L, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
        fprintf(f2, "\n快速排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
      case 4:
        printf("\n堆排序:\n");
        
        HeapSort(&L, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n",CmpNum[select], ChgNum[select]);
       fprintf(f2, "\n堆排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
      case 5:
        printf("\n冒泡排序:\n");
        
        BubbleSort(&L, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
       fprintf(f2, "\n冒泡排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
      case 6:
        printf("\n选择排序:\n");
        
        SelSort(&L, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
        fprintf(f2, "\n选择排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
      case 7:
        printf("\n折半排序:\n");
        
        BInsertSort(&L,&CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
       fprintf(f2, "\n折半排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
      fclose(f2);
		break;
       case 8:
        printf("\n归并排序:\n");
        
        MergeSort(&L,&CmpNum[select],&ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
          
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
        fprintf(f2, "\n归并排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
       case 9:
        printf("\n基数排序:\n");
        
        RadixSort(&L,&CmpNum[select], &ChgNum[select]);
         if ((f2 = fopen("Output.txt", "a")) == NULL){
          printf("can't open file\n");
         exit(0);
		 }
		   	for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
        printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
        fprintf(f2, "\n基数排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
        fclose(f2);
        break;
     case 10:
        printf("\n2-路插入排序:\n");
        
        InsertSortBinary(&L, &CmpNum[select], &ChgNum[select]);
        if ((f2 = fopen("Output.txt", "a")) == NULL){
    printf("can't open file\n");
    exit(0);
  }
   		for(i=1;i<=MAXSIZE;i++){
			printf("%5d ",L.r[i].key);
           
			if(++j%10==0)printf("\n");
		}
		printf("\n\nCompareNumber=%d\tChageNumber=%d\n", CmpNum[select],ChgNum[select]);
         fprintf(f2, "\n2-路插入排序 CompareNumber=%d\tChageNumber=%d\n", CmpNum[select], ChgNum[select]);
       fclose(f2);
		break;
     case 11:
        AllAbove(&L, CmpNum, ChgNum);
        break;
 
    }
  }
 
  while (select != 12 );
  Display(&L);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -