排序算法 C语言

server/2025/1/11 17:53:19/

一、冒泡排序

1、实现原理:两两比相邻元素,如果它们的顺序错误就把它们交换过来,小的在前,大的在后。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define MAXSIZE 10typedef struct
{int r[MAXSIZE];int length;
}SqList;void swap(SqList *L,int i,int j)
{int temp = L->r[i];L->r[i] = L->r[j];L->r[j] = temp; 
}void BubbleSort(SqList *L)
{int i,j;for(i=0;i<L->length-1;i++){for(j=L->length-1;j>=i;j--)//从后往前,交换次数每次减少一次{if(L->r[j] > L->r[j+1])swap(L,j,j+1);}}
}int main(void)
{int i;//为结构体指针的数组赋值,需要确保结构体指针已经被正确的分配了内存SqList *test = (SqList *)malloc(sizeof(SqList));if(test == NULL){printf("内存分配失败\r\n");}test->length = sizeof(test->r)/sizeof(test->r[0]);printf("length:%d\r\n",test->length);int arry[10] = {2,5,4,1,8,9,0,3,6,7};memcpy(test->r,arry,test->length * sizeof(int));BubbleSort(test);for(i=0;i<10;i++){printf("  r[%d]:%d",i,test->r[i]);}free(test);return 0;
}

二、简单选择排序

1、它的基本思想是:每一轮从未排序的部分中选择最小(或最大)的元素,将其与未排序部分的第一个元素交换位置,从而将最小(或最大)的元素放到已排序部分的末尾。这样,每一轮过后,未排序部分就减少一个元素,直到所有元素都排序完成。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAXSIZE 10typedef struct
{int r[MAXSIZE];int length;
}SqList;void swap(SqList *L,int i,int j)
{int temp = L->r[i];L->r[i] = L->r[j];L->r[j] = temp;
}void SelectSort(SqList *L)
{int i,j,min;for(i=0;i<L->length-1;i++){min = i;for(j=L->length-1;j>=i;j--) //交换次数每次减少一次{if(L->r[min] > L->r[j])min = j;}if(min != i) {swap(L,i,min);}}
}int main(void)
{int i;//为结构体指针的数组赋值,需要确保结构体指针已经被正确的分配了内存SqList *test = (SqList *)malloc(sizeof(SqList));if(test == NULL){printf("内存分配失败\r\n");}test->length = sizeof(test->r)/sizeof(test->r[0]);printf("length:%d\r\n",test->length);int arry[10] = {2,5,4,1,8,9,0,3,6,7};memcpy(test->r,arry,test->length * sizeof(int));SelectSort(test);for(i=0;i<10;i++){printf("  r[%d]:%d",i,test->r[i]);}free(test);return 0;
}

三、直接插入排序

1、基本思想:它的基本思想是将一个待排序的元素,按其大小插入到已经排好序的有序序列中的适当位置,从而得到一个新的、记录数增加1的有序序列

  1. 从第一个元素开始,认为该元素已经被排序。
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。
  3. 如果已排序的元素大于新元素,将该元素移到下一位置。
  4. 重复步骤3,直到找到已排序的元素小于或等于新元素的位置。
  5. 将新元素插入到该位置后。
  6. 重复步骤2至5,直到所有元素都被排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAXSIZE 10typedef struct
{int r[MAXSIZE];int length;
}SqList;void InsertSort(SqList *L)
{int i,j,temp;for(i=1;i<L->length;i++){if(L->r[i] < L->r[i-1]){temp = L->r[i];for(j=i-1;L->r[j]>temp;j--) L->r[j+1] = L->r[j];L->r[j+1] = temp;}}
}int main(void)
{int i;//为结构体指针的数组赋值,需要确保结构体指针已经被正确的分配了内存SqList *test = (SqList *)malloc(sizeof(SqList));if(test == NULL){printf("内存分配失败\r\n");}test->length = sizeof(test->r)/sizeof(test->r[0]);printf("length:%d\r\n",test->length);int arry[10] = {2,5,4,1,8,9,0,3,6,7};memcpy(test->r,arry,test->length * sizeof(int));InsertSort(test);for(i=0;i<10;i++){printf("  r[%d]:%d",i,test->r[i]);}free(test);return 0;
}


http://www.ppmy.cn/server/157529.html

相关文章

【AI进化论】 如何让AI帮我们写一个项目系列:将Mysql生成md文档

一、python脚本 下面给出一个简易 Python 脚本示例&#xff0c;演示如何自动获取所有表的结构&#xff0c;并生成一份 Markdown 文件。你可根据自己的需求做修改或使用其他编程语言。 import mysql.connector# ------------------------ # 1. 连接数据库 # -----------------…

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…

Ruby语言的循环实现

Ruby语言的循环实现 引言 Ruby语言是一种动态的、解释型的编程语言&#xff0c;以其简洁和优雅而闻名。在开发过程中&#xff0c;我们常常需要通过循环结构来处理重复性的任务。不论是遍历数组、处理集合&#xff0c;还是进行条件判断&#xff0c;循环都是一种非常重要的控制…

『SQLite』解释执行(Explain)

摘要&#xff1a;本节主要讲解SQL的解释执行&#xff1a;Explain。 在 sqlite 语句之前&#xff0c;可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语&#xff0c;用于描述表查询的细节。 基本语法 EXPLAIN 语法&#xff1a; EXPLAIN [SQLite Query]EXPLAIN QUER…

priority_queue优先队列

目录 1. 最短路径算法&#xff08;Dijkstra算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 2. 最小生成树算法&#xff08;Prim算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 3. 哈夫曼编码&#xff08;Huffman Coding&#x…

【跟着官网学技术系列之MySQL】第4天之安装MySQL

前言 在当今信息爆炸的时代&#xff0c;拥有信息检索的能力很重要。 作为一名软件工程师&#xff0c;遇到问题&#xff0c;你会怎么办&#xff1f;带着问题去搜索引擎寻找答案&#xff1f;亦或是去技术官网&#xff0c;技术社区去寻找&#xff1f; 根据个人经验&#xff0c;一…

Qt: 无法运行rc.exe

Qt: 无法运行rc.exe 当电脑中同时安装了VS2015和VS2019时会出现这种情况 解决办法 1、找到rc.exe文件 2、我的文件夹目录在这儿 C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64 找到rc.exe与rcdll.dll文件 3、将这两个文件复制到vs2015安装目录中 D:\VS20…

C# 获取当前运行路径的6种实用方法

C# 获取当前运行路径的多种方法 在C#中&#xff0c;获取当前运行路径&#xff08;即程序的工作目录&#xff09;是常见的需求&#xff0c;尤其在处理文件读写、日志记录和配置文件时。不同的场景可能需要使用不同的方法来获取路径。本文将介绍几种常用的获取当前运行路径的方法…