Gran trabajo de "Estructuras de datos y algoritmos" en lenguaje C -------- clasificación interna (incluidos cinco códigos de método de clasificación + capturas de pantalla)

Elaboración de la estructura de datos, resumen, programación de informes, realización de clasificación interna, programa de diseño integral

Implementar varios algoritmos de clasificación (clasificación de inserción directa, clasificación de media inserción, clasificación de colinas, clasificación de burbujas, clasificación de selección simple)

#include<stdio.h>
#define MaxSize 20
#include<windows.h>
typedef int KeyType;    //定义关键字类型
typedef struct          //记录类型
{
    
    
     KeyType key;        //关键字项
} RecType;              //排序的记录类型定义

void cd();
void InsertSort(RecType R[],int n);
void out(RecType R[],int n);
void ShellSort(RecType R[],int n);
void BubbleSortl(RecType R[],int n);
void SelectSort(RecType R[],int n);
void Pos(int x, int y);
int mup();
int main(){
    
    
  int s,v,i,n=10;
  mup();
  Pos(35,13); 
  printf("请输入你要的操作    ");
  scanf("%d", &v);
  if(v==1){
    
    
  cd();
     RecType R[]={
    
    12,8,44,6,73,4,54,2,1,9};
     Pos(40,38); 
     scanf("%d", &s);
     while (s != 0) {
    
    
        switch (s)
        {
    
    
        case 1:Pos(30,40);printf("  1,直接插入排序\n");InsertSort(R,n);out(R,n);break;
        case 2:Pos(30,43);printf("  2,折半插入排序\n"); InsertSort(R,n);out(R,n); break;
        case 3:Pos(30,46);printf("  3,希尔排序\n"); ShellSort(R,n);out(R,n);break;
        case 4:Pos(30,49);printf("  4,冒泡排序\n");  BubbleSortl(R,n);out(R,n); break;
        case 5:Pos(30,52);printf("  5,简单选择排序\n");SelectSort(R,n);out(R,n); break;
        default: Pos(32,55);printf("请输入正确的数字\n"); break;
        
        }
        Pos(40,42+s*2.5);
        scanf("%d", &s);
    }
	}
  
     if(v==2)
    printf("退出\n");
}
void cd(){
    
    
	 int i;
	 for(i = 20;i<78;i+=2)//打印上下边框
      {
    
    
        Pos(i, 20);
        printf("■");//一个方块占两个位置
         Pos(i, 37);
        printf("■");
    }
   
     for (i = 20; i<38; i++)//打印左右边框
    {
    
    
        Pos(20, i);
         printf("■");
         Pos(76, i);
       printf("■\n");
  }
   
    Pos(30,21);
	printf("---------内排序系统---------\n"); 
	Pos(35,23);
    printf("1,直接插入排序\n");
    Pos(35,25);
    printf("2,折半插入排序\n");
    Pos(35,27);
    printf("3,希尔排序\n");
    Pos(35,29);
    printf("4,冒泡排序\n");
    Pos(35,31);
    printf("5,简单选择排序\n");
    Pos(35,33);
    printf("0,退出系统\n");
    Pos(35,35);
    printf("请输入你要的操作\n");}

//直接插入排序 
void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    
    
    int i,j;
    RecType tmp;
    for (i=1; i<n; i++)
    {
    
    
        tmp=R[i];
        j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置
        while (j>=0 && tmp.key<R[j].key)
        {
    
    
            R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
            j--;
        }
        R[j+1]=tmp;      //在j+1处插入R[i]
    }
}
//折半插入排序
void InsertSort1(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    
    
    int i,j,low,high,mid;
    RecType tmp;
    for (i=1; i<n; i++)
    {
    
    
        tmp=R[i];
        low=0;
        high=i-1;
        while (low<=high)
        {
    
    
            mid=(low+high)/2;
            if (tmp.key<R[mid].key)
                high=mid-1;
            else
                low=mid+1;
        }
        for (j=i-1; j>=high+1; j--)
            R[j+1]=R[j];
        R[high+1]=tmp;
    }
}
//希尔排序
void ShellSort(RecType R[],int n){
    
    
	int i,j,d;
	RecType tmp;
	d=n/2;
	while(d>0){
    
    
		for(i=d;i<n;i++){
    
    
			tmp=R[i];
			j=i-d;
			while(j>=0&&tmp.key<R[j].key){
    
    
				R[j+d]=R[j];
				j=j-d;
			}
			R[j+d]=tmp;
		}
		d=d/2;
	}
} 
//冒泡排序
void BubbleSortl(RecType R[],int n){
    
    
	int i,j,t;
	bool exchange;
	for(i=0;i<n-1;i++){
    
    
		exchange=false;
		for(j=n-1;j>i;j--)
		if(R[j].key<R[j-1].key){
    
    
		    t=R[j].key;
		    R[j].key=R[j-1].key;
		    R[j-1].key=t;
			exchange=true;
		}
		if(!exchange)
		return;
	}
} 
//简单选择排序
void SelectSort(RecType R[],int n){
    
    
	int i,j,k,t;
	for (i=0;i<n-1;i++){
    
    
		k=i;
		for(j=i+1;j<n;j++)
		    if(R[j].key<R[k].key)
		        k=j;
		if(k!=i){
    
    
		    t=R[i].key;
		    R[i].key=R[k].key;
		    R[k].key=t;
	    }  
	}
} 

 
//输出
void out(RecType R[],int n){
    
    
	int i;
     printf("\t\t\t\t");
	 for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
} 
 
  

 int mup()//创建地图
  {
    
    
    int i;
    Pos(30,5);
    printf("   ----------内排序系统--------------\n"); 
     Pos(30,7);
  	printf("   ----------1进入内排序系统---------\n"); 
  	 Pos(30,9);
  	printf("   ----------2退出-------------------\n"); 
  
     for(i = 20;i<78;i+=2)//打印上下边框
      {
    
    
        Pos(i, 0);
        printf("■");//一个方块占两个位置
         Pos(i, 15);
        printf("■");
    }
   
     for (i = 1; i<16; i++)//打印左右边框
    {
    
    
        Pos(20, i);
         printf("■");
         Pos(76, i);
       printf("■\n");
  }
   
}
 void Pos(int x, int y)//设置光标位置
  {
    
    
     COORD pos;
     HANDLE hOutput;
     pos.X = x;
     pos.Y = y;
     hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hOutput, pos);
 }


Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/ring__wang/article/details/108768213
Recomendado
Clasificación