数据结构之排序(冒泡,选择,插入,快排)

2024-06-19 17:18

本文主要是介绍数据结构之排序(冒泡,选择,插入,快排),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

冒泡排序:---------------------------------------------------------

#include <stdio.h>
#define SIZE 8
 
void bubble_sort(int a[], int n);
 
void bubble_sort(int a[], int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
        {
            if(a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
}
 
int main()
{
    int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
    int i;
    bubble_sort(number, SIZE);
    for (i = 0; i < SIZE; i++)
    {
        printf("%d\n", number[i]);
    }
    printf("\n");
}

选择排序:-----------------------------------------------------

#include<stdio.h>
#define SIZE 8

void selectSort(int * array);

int main()
{
int array[8]={3,6,9,-3,9,2,1,45};
int i;
selectSort(array);
for(i=0;i<SIZE;i++)
{
printf("%d\n",array[i]);
}
return 0;
}


void selectSort(int * array)
{
int i,j,min,t;
for(i=0;i<SIZE;i++)
{
min=i;
for(j=i+1;j<SIZE;j++)
{
if(array[min]>array[j])
{
min=j;
}
}
if(i!=min)
{
t=array[min];
array[min]=array[i];
array[i]=t;
}
}

}

直接插入排序:----------------------------------------------------------------------

#include<stdio.h>
#define SIZE 8


void insertSort(int *array);


int main()
{
int array[SIZE] = {3,4,1,6,-1,0,9,8};
int i;
insertSort(array);
for(i=0;i<SIZE;i++)
{
printf("%d\n",array[i]);
}
return 0;
}


void insertSort(int *array)
{
int i,j;//i代表未排序的数据指针,j代表已排序的数据指针
int t;
for(i=1;i<SIZE;i++)
{
for(j=i;j>=0;j--)//i指针之前的数据已经有序
{
if(array[j]<array[j-1])//把i指针指向的数据插入i之前的集合中
{
t=array[j-1];
array[j-1]=array[j];
array[j]=t;
}
}
}
}

快排-------------------------------------------------------------------------------

#include<stdio.h>

void quickSort(int *array,int low,int high);
int findPos(int *array,int low,int high);

int main()
{
    int i;
    int array[6] = {8,9,3,0,4,5};
    quickSort(array,0,5);
    for(i=0;i<6;i++)
    {
        printf("%d\n",array[i]);
    }
    return 0;
}

void quickSort(int *array,int low,int high)
{
    int pos;
    if(low < high)
    {
        pos = findPos(array,low,high);
//        printf("%d\n",pos);
        quickSort(array,low,pos-1);
        quickSort(array,pos+1,high);
    }
}

int findPos(int *array,int low,int high)
{
    int value = array[low];
    while(low<high)
    {
        while(low<high && value<=array[high]) //high指针所指的数据比value大的且high指针不等于low指针,high指针向左移
        {
            high--;
        }
        array[low] = array[high];//high指针所指的数据比value小的,直接向左赋值
        while(low<high && value>=array[low])//low指针所指的数据比value小的且high指针不等于low指针,low指针向右移
        {
            low++;
        }
        array[high] = array[low];//low指针所指的数据比value大的,直接向右赋值。
    }
    array[low] = value;

    return high;
}

这篇关于数据结构之排序(冒泡,选择,插入,快排)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075653

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam