选择法排序与冒泡排序分而治之
选择法排序
先找出一组数中的最大值
#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步的作业吧



