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

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

相关文章

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快