【整理】常见的数组排序方法以及代码实现
来源:互联网 发布:联合国商品数据库 编辑:程序博客网 时间:2024/06/05 14:48
(1) 冒泡法
核心思想: 通过比较相邻位置的元素,如果第一个元素比第二个元素大,则交换两个元素的位置
代码:
void bubble(int arr[], int len){//1.首先使用外层循环控制比较的轮数int i = 0, j = 0;for (i =1; i <len; i++){//2.针对每一轮进行下标控制for (j =0; j <len-i; j++){//3.比较相邻元素的大小,进行交换if (arr[j] > arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}
(2)插入排序算法
从第二个元素起依次取出,与已排好序的元素比较,并在相应位置插入
从第二个元素起依次取出,与已排好序的元素比较,并在相应位置插入
代码:
void insert(int arr[], int len){//1.从第二个元素起,依次取出int i = 0, j = 0;for (i =1; i <len; i++){//单独保存当前取出的元素,避免覆盖int tmp = arr[i];//2.取出的元素依次与左边的元素进行比较,如果左边有元素并且大于取出的元素,则左边元素右移for (j =i; arr[j-1] >tmp && j>=1; j--){arr[j] = arr[j-1];}//3.直到左边元素小于取出/左边无元素,将取出元素插入到左边元素的右边/最左边if (j != i){arr[j] = tmp;}}}
(3) 选择排序算法
逐次找出未排序元素中的最小值,并逐个排放
代码:
void choose(int arr[], int len){//1.从第一个数起,依次取出int i = 0, j = 0;for(i =0; i <len-1; i++){//2.假定取出的当前是最小值,使用min记录int min = i;//3.使用min记录的元素与后续元素比较,如果找到比min记录还小的元素,则使用min重新记录for (j =i+1; j <len; j++){if (arr[j] < arr[min]){min = j;}}//4.直到与后续元素比较完毕,则交换min记录的元素与最开始假定的最小值if (min != i){int tmp = arr[i];arr[i] = arr[min];arr[min] = tmp;}}}
(4) 快速排序算法
设定基准值,大于基准值放基准值右边,小于基准值元素放基准值左边。再通过递归直到数组有序
代码:
void quick(int arr[], int left, int right){//1.计算中间元素的下标int p = (left + right) / 2;//2.选择中间元素作为基准值,单独保存起来int pivot = arr[p];//3.将所有小于基准值的元素放在基准值的左边,将所有大于等于基准值的元素放在基准值的右边int i = 0, j = 0;for (i =left, j =right; i <j;){//如果左边有元素,并且左边元素小于基准值,则使用下一个左边元素与基准值比较while (arr[i] < pivot && i < p){i++;}//如果左边有元素,并且不小于基准值if (i < p){//把i指向的元素赋值给p指向的位置arr[p] = arr[i];//变量p指向i指向的位置p = i;}//下面开始处理右边的元素while (arr[j] >= pivot && j > p){j--;}if (j > p){arr[p] = arr[j];p = j;}}//4.i和j生命,将基准值放到生命的位置arr[p] = pivot;//5.使用递归重复以上过程//保证基准值的左右两侧存在至少一个元素时才需要递归,否则不需要递归if (p - left > 1){quick(arr, left, p-1);}if (right - p > 1){quick(arr, p+1, right);}}
(5)“SHELL”法
数组中设定步长进行排序,再不断减小步长
代码:
void shell(int *a,int n) { int i,j,k,x; k=n/2; /*间距值*/ while(k>=1){ for(i=k;i<n;i++){ x=a[i]; j=i-k; while(j>=0&&x<a[j]) { a[j+k]=a[j]; j-=k; } a[j+k]=x; } k/=2; /*缩小间距值*/ } }
0 0
- 【整理】常见的数组排序方法以及代码实现
- 【数据结构】常见的排序方法的实现以及性能对比
- 数组排序的常见方法
- 四种常见的数组排序方法(php实现)
- 数组的使用以及常见的方法
- 常见排序算法代码整理
- 各种常见排序代码整理
- 常见的排序算法以及实现
- java中数组常见的排序问题整理
- 【整理】队列特征以及代码的实现
- Java的常见排序之代码实现。
- 各种常用的排序算法实现对数组的排序——整理总结(代码实现)
- JS 整理javascript中一些常见的数组方法
- 整理java排序的方法实现
- 快速排序中常见中轴选择方法及实现代码
- 整理的常见排序算法
- 堆排序的数组实现代码
- Java代码实现二维数组的排序
- 关于unterminated argument list invoking macro \”%s\”"
- 黑马程序员——Java基础——多线程
- Eclipse的快捷键
- 什么是云服务器私有网络和防火墙
- leetcode[83]:Remove Duplicates from Sorted List
- 【整理】常见的数组排序方法以及代码实现
- 7 Steps for Learning Data Mining and Data Science
- 线性表节点
- iOS开发UI高级—10使用picker View控件完成一个简单的选餐应用
- 【SDUT 3253】 Game!
- iOS CoreData详解(七)性能相关
- 美素数备忘
- redis (二)
- 二分查找的小改进