排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用 /*** 交换数组元素* @param arr* @param a* @param b*/public static void swap(int []arr,int a,int b){arr[a] = arr[a]+arr[b];arr[b...
图解数据结构(10)——排序 十四、排序(Sort)http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html《Thinking in Algorithm》12.详解十一种排序算法http://blog.csdn.net/speedme/article/details/23021467原文:http://www.cnblogs.com/whchensir/p/4870437.html
// PaiXu.maoPao(a); /** * 选择排序 */ /* 选择排序的逻辑是这样的,第一步先从整个数组中选出最小的放在数组的最左边(即索引为零的位置)。 然后从剩余的数组中选出最小的放在最左边(即索引为1的位置)一次类推,共筛选数组长度减一轮。 */// 创建一个无序数组 int[] a=new int[]{32,2,2424,21,46,46446,34,21};// 外层循环决定了筛选轮数若...
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量
使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中
同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
什么时候最快
当输入的数据可以均匀的分配到每一个桶中。
什么时候最慢
当输入的数据被分配到了同一个桶中...
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void ma...
public class HelloJava{ public static void main(String[] args) { int[] arr1 = new int[] {45,40,90,30,80,70,50}; System.out.println("排序前: "); for(int i=0; i<arr1.length; i++) { System.out.print(arr1[i]+" "); } System.out.println(); System.out.println("快速排序后:"); quickSort(arr1, 0, arr1.length-1); int[] arr2 = new int[] {11,52,4,5,65,4,2,1,45}; System.out.println("排序前: "...
数据结构和算法对一个程序来说是至关重要的,现在介绍一下几种算法,在项目中较为常用的算法有:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等7中算法。 现在介绍选择排序算法,希尔排序算法,快速排序算法。 (1).选择排序算法:通过n-i次关键字间的比较,从n-i+1个记录中选择出关键字最小的记录,并和第i(1大于等于i小于等于n)个记录交换。 (2).希尔排序:先取一个小于n的整数d1作为第一...
Java工具包中的Arrays工具类里面有数组的快速排序算法。源码如下: 1/** 2 * Sorts the specified range of the array using the given3 * workspace array slice if possible for merging4 *5 * @param a the array to be sorted6 * @param left the index of the first element, inclusive, to be sorted7 * @param right the index of the last element, inclusive, to be sorted8 * @param work...
快排的时间复杂度O(nlogn)-O(N^2),空间复杂度为O(long2n)-O(N)传统的快排与优化的快排的优化之处在于,传统的左边每次都保存着小于等于target即x的数值,包含着x,下次对左边的再次进行快排,还是要比较x,优化的把 等于x放在中间,减少了重复元素的比较次数。当origin[cur]>origin[more] 的时候,将origin[cur]和origin[more-1]交换,cur不变,more--。当origin[cur]=origin[more] 的时候,cur++;当origin[cur]<origin[more] 的时...
模板部分(想背的就背一下吧,但是不建议……毕竟排序用sort函数就行了,这些排序的算法只是为了锻炼你的思维逻辑能力罢了):1.选择排序#include<cstdio>#define N 100000+100int a[N],n;int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<n;i++){int k=i;for(int j=i+1;j<=n;j++)if(a[j]<a[k]) k=j;if(k!=i){int p=a[k];a[k]=a[i];a[i]=p;}}for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d",...
思路: 选择排序每次迭代都在寻找剩下的数组元素中的最小值(最大值),依次拿数组中的一个元素和剩下的元素进行比较。然后把该极值移动到数组的另一边。原始数组: 5 9 4 6 7 3 2 一次迭代: 2 9 4 6 7 3 5 2 3 4 6 7 9 5 2 3 4 6 7 9 5 2 3 4 5 7 9 6 2 3 4 5 6 9 7 2 3 4 5 6 7 9 template< class T >
void selectSort( T...
基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。算法实现:(HDU 1040 亲测 AC)#include<iostream>
usingnamespace std;
constint N =1005;
void BubbleSort(int a[],int );
void print(int a[],int num);
void swap(int &a,int &b);int main()
{int s[N]...
1 #include<iostream>2usingnamespace std;3 4//************快速排序法********* 5int partiton(int array[10],int s,int t,int &cutpoint){6int x=array[s];7int i,j;8 i=s;9 j=t;
10while(i!=j){
11while(i<j&&array[j]>x)j--;
12if(i<j){
13 array[i]=array[j];
14 i++;
15 }
16while(i<j&&array[i]<x)i++;
17if(i<j){
18 array[j]=array[i];
19 j--;
20 ...
选择排序的基本思想:每次选择未排序元素中的最小(非增序列)或者最大(非减序列)的一个一次加入到已排序序列后面,直到所有元素都排序完 #include <stdio.h>
void selection_sort(int arr[],int length)
{int i,j;for (i = 0; i < length; i++){int minval_index = i;for (j = i+1; j < length; j++){if (arr[j] < arr[minval_index]){minval_index = j;}}int temp = arr[i];arr[i] = arr[minval_index];arr[minval_index] = temp;}
}...
?原文:https://www.cnblogs.com/kexinxin/p/11595225.html