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

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

相关文章

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.由快

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常