基数排序和分组排序
来源:互联网 发布:淘宝订单数据 编辑:程序博客网 时间:2024/06/10 20:26
我们先来讲一下其他排序的特点:
冒泡排序:
相邻两个数比较获得最大或者最小的数,剩下的再去排序最大最小的,每轮冒出一个数
选择排序:
从所有数中找出一个需要的数和固定位置交换,所有数都选择一次就所有数都有序排列
插入排序:
把第一个元素当成一个有序数组,然后依次把其他元素插入到这个有序数组中
基数排序用到的是数组下标天然有序
使用基数排序的缺点:
1.占用大的内存
2.数组中的元素不能重复
3.只能排序整数
分组排序:
把分组分成两组 l r
l组小于r组,然后l组分成两组ll lr r组分成两组rl rr,分到每个组只有一个元素为止。
看一下基数排序的代码:
#include <stdio.h>void sort(int* a,int len,int max){int b[max+1];int i;for(i=0;i<max+1;i++){b[i]=-1;}for(i=0;i<len;i++){b[a[i]]=a[i];}for(i=0;i<max+1;i++){if(b[i]!=-1)printf("%d ",b[i]);}printf("\n");}int main(int argc, char const *argv[]){int a[10]={9,7,0,8,6,4,5,3,1,2};sort(a,10,9);return 0;}分组排序的代码:
#include <stdio.h>void print(int* a,int len){int i;for(i=0;i<len;i++)printf("%d ",a[i]);printf("\n");}void sort(int* a,int len){//排序//1 把整个数组分成两个数组if(len <= 1) return;int l = 0;int r = len-1;int t;while(l<r){while(l<r && a[l]<a[r]) r--;t = a[l];a[l] = a[r];a[r] = t;while(l<r && a[l]<a[r]) l++;t = a[l];a[l] = a[r];a[r] = t;}print(a,len);//2 调用本身对两个数组排序sort(a,l+1);//0-l 排序sort(a+l+1,len-l-1);//l+1 len-1 排序}int main(){int array[10] = {99,7,67,32,4,31,6,53,8,-4};printf("before sort:");print(array,10);sort(array,10);printf("after sort:");print(array,10);return 0;}
阅读全文
0 0
- 基数排序和分组排序
- 计数排序和基数排序
- 计数排序和基数排序
- 基数排序和计数排序
- 基数排序和桶排序
- 计数排序和基数排序
- 计数排序和基数排序
- 计数排序和基数排序
- 桶排序和基数排序
- 计数排序和基数排序
- 桶排序和基数排序
- 归并排序和基数排序
- 快速排序和基数排序
- 计数排序和基数排序
- 计数排序和基数排序
- 计数排序和基数排序
- 桶式排序和基数排序
- Java 基数排序和计数排序
- 名词缩写字母解释
- c++查找目录下的指定类型的全部文件
- java RMI性能调试监控
- shell下function报错
- git ssh
- 基数排序和分组排序
- 2017年复合材料与高分子科学工程国际会议(CMPSE2017)
- 日拱一卒——160个crackme之#1
- UVA
- VS 2015版图标说明
- OpenGL实现摄像机漫游/三次贝塞尔曲线
- jQuery<3.3>
- 【机器学习】BP算法学习笔记
- ubuntu解决中文乱码问题