c语言常见的几种排序方法总结
一:选择排序和冒泡排序
这两种排序比较简单,直接贴出代码:
#include <stdio.h> void choose_sort(int *arr, int n);
void bubble_sort(int *arr, int n);
void show(int *arr, int n); int main()
{
int arr[] = {, , , , , , , , , }; /*选择排序*/
choose_sort(arr, );
show(arr, ); /*冒泡排序*/
bubble_sort(arr, );
show(arr, ); return ;
} void choose_sort(int *arr, int n)
{
int i = ;
int j = ;
int index = ;
int swap = ; for(i = ; i < n; i++) {
index = i;
for(j = i; j <n; j++ ) {
if(arr[index] > arr[j]) {
index = j;
}
}
swap = arr[i];
arr[i] = arr[index];
arr[index] = swap;
}
} void bubble_sort(int *arr, int n)
{
int i = ;
int j = ;
int swap = ; for(i = ; i < n - ; i++) {
for(j = ; j < n - i - ; j++) {
if(arr[j] > arr[j + ]) {
swap = arr[j];
arr[j] = arr[j + ];
arr[j + ] = swap;
}
}
}
} void show(int *arr, int n)
{
int i = ;
for(i = ; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
二:插入排序
下面代码是在一个有序数组中的插入一个数,插入后仍然有序:
#include <stdio.h> void insert_sort(int *arr, int num, int n); int main()
{
int arr[] = {, , , , , , , , };
insert_sort(arr, , ); int i = ;
for(i = ; i < ; i++) {
printf("%d ", arr[i]);
}
printf("\n"); return ;
} void insert_sort(int *arr, int num, int n)
{
int i = ;
int index = ; for(i = ; i < n; i++) {
if(arr[i] > num) {
index = i;
break;
}
} if(i == n) {
arr[i] = num;
}
else {
for(i = n; i >= index; i--) {
arr[i + ] = arr[i];
}
arr[index] = num;
}
}
三:快速排序
#include <stdio.h> void quick_sort(int *arr, int low, int high);
void show(int *arr, int n); int main()
{
int arr[] = {, , , , , , , }; quick_sort(arr, , );
show(arr, ); return ;
} void quick_sort(int *arr, int low, int high)
{
int pivot = ;
int i = ;
int j = ;
if(high <= low)
return; pivot = arr[low];
i = low;
j = high; while(i < j) {
while(i < j && arr[j] > pivot)
j--;
if(i < j)
arr[i++] = arr[j];
while(i < j && arr[i] < pivot)
i++;
if(i < j)
arr[j--] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, low, i - );
quick_sort(arr, i + , high);
} void show(int *arr, int n)
{
int i = ;
for(i = ; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
快速排序涉及到递归调用,比较难理解,最好在纸上画出执行过程,慢慢理解
c语言常见的几种排序方法总结的更多相关文章
- 十七、Java中数组常见的几种排序方法!
转载自:https://www.cnblogs.com/bekeyuan123/p/6891875.html 数组的定义: // 3种定义方式 int[] arr = new int[5]; int[ ...
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
- php常见的几种排序以及二分法查找
<?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 ...
- AJPFX关于Java中运用数组的四种排序方法
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法.快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现.冒泡法是运用遍历数组进行比 ...
- ch1_6_1求解两种排序方法问题
考拉有n个字符串字符串,任意两个字符串长度都是不同的. 考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如: "car" < "carr ...
- python 两种排序方法 sort() sorted()
python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...
- 三种排序方法(c语言)
#include "stdio.h" void main() {void read_data(int a[],int n); void write_data(int a[],int ...
- c#实现几种排序方法
插入排序 1.简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序 ...
- JAVA中运用数组的四种排序方法
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...
随机推荐
- Android虚拟机 USB转串口调试方法
有时候需要在虚拟机调试串口,首先安装串口的驱动程序(不知道的话可以用驱动精灵),然后打开设备管理器找到驱动,查看驱动使用的端口(比如COM3),虚拟机需要在命令行启动: 将SDK下的tools文件夹加 ...
- Unity C# 自定义TCP传输协议以及封包拆包、解决粘包问题
本文只是初步实现了一个简单的TCP自定协议,更为复杂的协议可以根据这种方式去扩展. TCP协议,通俗一点的讲,它是一种基于socket传输的由发送方和接收方事先协商好的一种消息包组成结构,主要由消息头 ...
- 队列链式存储 - 设计与实现 - API函数
队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式 ...
- 运行Myeclipse时,如何删除IVM窗口
windows------>preference------>run/debug------->lauching--------->percpectives,改成never,n ...
- cocos2D v3.x中动作回调函数的变化
cocos2D v3.x版本中的动作的回调函数不能再带任何参数并且不能返回任何值. 官方给出的传递参数的办法是: 选择器(selector)不能带有任何形参,选择器需要的参数必须通过ivar或prop ...
- cocos2D v3.x 中action的回调block变化
cocos2D v2.x中有带参数的回调block: id blk = [CCCallBlockN actionWithBlock:^(CCNode *node){ node.position = o ...
- iOS开发讲解SDWebImage,你真的会用吗?
SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITableViewCell上有 ...
- 使用“万能数据库查询分析器”的Windows 7、Windows 8、Windows 10的用户须知
与以前的Windows操作系统版本(包括WinXP/VISTA/Windows2000/WindowsNt/Win98)不同,Windows 7.Windows 8.Windows 10短日期采用的分 ...
- 【Android 应用开发】BluetoothSocket详解
一. BluetoothSocket简介 1. 简介 客户端与服务端 : BluetoothSocket 和 BluetoothServerSocket 类似于Java中的套接字的 Socket 和 ...
- 拆解轮子之XRecyclerView
简介 这个轮子是对RecyclerView的封装,主要完成了下拉刷新.上拉加载更多.RecyclerView头部.在我的Material Design学习项目中使用到了项目地址,感觉还不错.趁着毕业答 ...