选择法排序与冒泡排序分而治之

选择法排序

先找出一组数中的最大值

#include <stdio.h>
void main()
{
	int a[10]={34,56,27,87,65,92,-3,76,21,99};
	int max;
	int i,t;
	for(i=0;i<10;i++)
	{
		max=a[0];
		for(i=0;i<10;i++)
		{
			if(a[i]>max)
	    {
	    	max=a[i];
		}
		}
	}
	printf("%d",max);
}

将最大值放到初始位置

逐渐找出10个数,9个数,8个数——中的最大值,并将其放在剩余数组第一位

#include <stdio.h>

// 选择排序函数
void selectionSort(int arr[], int n) {
    int i, j, minIndex, temp;
    
    // 外层循环:控制排序趟数 (共 n-1 趟)
    for (i = 0; i < n - 1; i++) {
        // 假设当前起始点 i 是最小值的下标
        minIndex = i;
        
        // 内层循环:在未排序部分中找到最小值的下标
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j; // 更新最小值的下标
            }
        }
        
        // 将找到的最小值与当前起始点交换
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

int main() {
    int arr[100], n, i;
    
    // 输入数组大小
    printf("请输入数组元素个数: ");
    scanf("%d", &n);
    
    // 输入数组元素
    printf("请输入 %d 个整数:\n", n);
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    
    // 调用选择排序函数
    selectionSort(arr, n);
    
    // 输出排序结果
    printf("排序后的数组为:\n");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    return 0;
}

#include <stdio.h>
int main()
{
	int n,i;
	int a[10];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	int j,max_j,t;
	for(i=0;i<n;i++)
	{
		max_j=i;
		for(j=i;j<n;j++)
		{
			if(a[j]>a[max_j])
			{
				max_j=j;
			}
		}
		
			t=a[i];
		    a[i]=a[max_j];
		    a[max_j]=t;
		
	}
	printf("%d",a[0]);
	for(i=1;i<n;i++)
	{
		printf(" %d",a[i]);
	}
	return 0;
}

冒泡排序

相邻元素多次比较

将本组最大值放到队末

多轮最大值放到最末

void bubble(int a[],int n)
{
    int i,j;
    int t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
           if(a[j]>a[j+1])
           {
               t=a[j];
               a[j]=a[j+1];
               a[j+1]=t;
       }
        }
    }
}

选择法排序,again

#include <stdio.h>
int main()
{
    int n,a[10];
    scanf("%d",&n);
    int i;
    for(i=0;i<n;i++)
    {scanf("%d",&a[i]);}
    int j,max_i=0,t;
    for(i=0;i<n;i++)
    {
       max_i=i;                                          //该行不要放到for(j=i;j<n;j++)下面
        for(j=i;j<n;j++)
        {
            
            if(a[j]>a[max_i])
            {
                max_i=j;
            }
            }
            t=a[i];
            a[i]=a[max_i];
            a[max_i]=t;
    }
    int count=0;
    for(i=0;i<n;i++)
    {
        if(i==0)
        { printf("%d",a[i]);}
        else{printf(" %d",a[i]);}
    }
    return 0;
}

字符冒泡排序

#include <string.h>
#include <stdio.h>
int main()
{
    char s[5][81];
    int i;
    for(i=0;i<5;i++)
    {
        scanf("%s",s[i]);
    }
    int j;
    char st[81];
    for(i=0;i<5;i++)
    {
        for(j=0;j<4-i;j++)
        {
            if(strcmp(s[j],s[j+1])>0)
            {
                strcpy(st,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],st);
            }
        }
    }
    printf("After sorted:\n");
    for(i=0;i<5;i++)
    {
        printf("%s\n",s[i]);
    }
    return 0;
}

小作业小作业 文章被收录于专栏

小作业,姑且叫做操作步骤超过5步的作业吧

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务