常用的排序算法(C语言)

01前言排序是数据处理中经常使用的重要操作。

排序的功能是根据规则将数据元素(记录)的任意序列重新排列为有序序列。

我们必须精通常用的排序算法。

02 Bubble Sort Bubble Sort(英语:Bubble Sort)是一种简单的排序算法。

它反复访问要排序的数字序列,一次比较两个元素,如果它们的顺序错误(例如,从A到Z的最大到最小,第一个字母)是错误的,则交换它们。

示例:#include void bubble_sort(int arr [],int len){int i,j,temp;对于(i = 0; j< len-1 -i; j ++)的(i = 0; i& lt; len-1; i ++),如果(arr [j]& gt; arr [j + 1]){temp = arr [j]; arr [j] = arr [j + 1]; arr [j + 1] = temp;}} int main(){int arr [] = {22,34,3,32,82,55,89,50,37,5,64,35,9,70} ; int len =(int)sizeof(arr)/ sizeof(* arr); bubble_sort(arr,len);我for(i = 0; i& lt; len; i ++)printf(“%d”,arr [i]); return 0;} 03 select选择排序(Selection sort)是一种简单直观的排序算法。

它的工作原理如下。

首先在未排序的序列中找到最小的(大)元素,将其存储在已排序的序列的开头,然后继续从其余未排序的元素中找到最小的(大)元素,然后将其放在已排序的末尾顺序。

依此类推,直到对所有元素进行排序。

示例:void swap(int * a,int * b){int temp = * a; * a = * b; * b = temp;}无效的selection_sort(int arr [],int len){int i,j;对于(i = 0; i& lt len-1; i ++){int min = i; for(j& n = 1;& lt; len; j ++)//如果((arr [j]& lt; arr [min])//找到当前的最小min& nbsp; =& nbsp; j; //记录最小序列号swap(& amp; arr [min],& nbsp;& amp; arr [i]); / /进行交换}} 04插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。

它通过构造一个有序序列来工作。

对于未排序的数据,请按排序顺序从后到前扫描,找到相应的位置并将其插入。

在插入排序的实现中,通常采用就地排序。

因此,在从后向前扫描的过程中,有必要向后重复移动排序后的元素以为最新元素提供插入空间。

示例:void insert_sort(int arr [],int len){int i,j,temp; for(i = 1; i // from the second element temp = arr [i]; for(j = i; j& 0& amp; amp; amp; narsp; arr [j-1]& ; gt; temp; j--)arr [j] ==& nbsp; arr [j-1]; //将值移到大于temp的位置arr [j]& nbsp; =& nbsp ; temp; //暂时进入序列}} 05希尔排序希尔排序(又称为递减增量排序算法)是一种更高效率和改进版本的插入排序。

希尔排序是一种非稳定排序算法希尔排序基于提出了插入排序的以下两个属性和一种改进的方法:对几乎已排序的数据进行操作时,插入排序非常高效,也就是说,它可以实现线性排序的效率,但是插入排序通常效率不高,因为插入排序只能一次将数据移动一位。

希尔排序首先将要排序的记录序列分为几个子序列,以进行插入排序。

“;基本排序”,则正确。

所有记录均通过直接插入一次进行排序。

示例:void shell_sort(int arr [],int len){int gap,i,j;温度对于(gap = len& gt; 1; gap& gt; 0; gap = gap& gt; 1)//(i& nbsp; =  gap;& nbsp;& lt; len;& nbsp; i ++)& nbsp; {//序列插入排序temp = arr [i];对于(j = i-gap; j& == 0& amp; arr [j]&temp; j-=间隙)arr [j + gap] = arr [j]; arr [j +间隙] =温度; }} 06合并排序合并排序应用了分而治之的思想。

将大队列划分为小队列,然后在小队列中进行排序,然后将排序后的小队列组合为大队列。

步骤:1.划分为两个两个队列,直到它们不再被划分为止。

2.在小队列中排序3.左队列和右队列合并4.返回合并的队列示例://递归方法以实现void merge_sort_recursive(int arr [ ],int reg [],int start,int end){if(start& == end)ret urn; int len =结束开始,mid =(len& gt; 1)+开始; int start1 =开始,end1 =中间; int start2 =中+ 1,end2 =结束; merge_sort_recursive(arr,reg,start1,end1); merge_sort_recursive(arr,reg,start2,end2); int k =开始; while(start1& lt; = end1& amp; amp; amp; amp; amp; amp; amp; lt; = end2)reg [k ++] = arr [start1]& lt; arr [start2]? arr [start1 ++]:arr [start2 ++]; while(start1& lt; = end1)reg [k ++] = arr [start1 ++];而(start2& lt; =结束

客服
分享
电话
服务电话:
TOP
深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询 深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询
服务电话
联系我们

    深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询