public class ArrayDemo { public static void main(String[] args) { int array[] =new int[10]; int tmp; for (int i = 0; i <10 ; i++) { array[i]=(int)(Math.random()*100); System.out.println(array[i]+"、"); } System.out.println(); for (int a = 0; a <10 ; a++) { for (int j = 0; j <a ; j++) { if(array[j]>array[j+1]...
java----八种排序算法阅读目录1.直接插入排序2.希尔排序3.简单选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序8.基数排序回到目录1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写成代码:首先设定插入次数,即循环次数,for(int i=1;i<leng...
冒泡排序//冒泡排序 /* 每两个数之间做比较:较大的数放到右边,循环下去;就能够把最大的数字换到数组最后面 然后数组长度-- 再两个数之间作比较。。。。。 */void bubble(int a[],int n) {for(int i=0;i<n-1;i++)//注意a[n-1]为数组的最后一项,没有数字和他做比较,故i<n-1 {if(a[i]>a[i+1])a[i]=a[i]+a[i+1]-(a[i+1]=a[i]);} } void bubbleSort(int a[],int n) {while(n>0)bubble(a,n--); } int main(){int a[7]={7,2,1,3...
package org.rev.algorithm;/** * 堆排序,时间复杂度为O(nlogn),是利用堆的性质进行的一种选择排序。 * * 大顶堆是一个完全二叉树,所有的父节点都大于或等于它的左右子节点,即a[i]>=a[2i+1]&&a[i]>=a[2i+2]。 *(小顶堆是父节点<=子节点) * * 对于完全二叉树,任意节点a[i]的父节点的索引值是(i-1) / 2 向下取整。 * * 1.对于序列a[0]-a[n-1],构建大顶堆,堆顶a[0]为最大值。 * * 2. 交换堆顶a[0]和最后一个元素...
//调整函数function headAdjust(elements, pos, len){//将当前节点值进行保存var swap = elements[pos];//定位到当前节点的左边的子节点var child = pos * 2 + 1;//递归,直至没有子节点为止while(child < len){//如果当前节点有右边的子节点,并且右子节点较小的场合,采用右子节点//和当前节点进行比较if(child + 1 < len && elements[child] > elements[child + 1]){child += 1;}//比较当前节点和最大的子节点,大于则进行值交换...
题目链接:https://www.acwing.com/problem/content/description/787/吐槽:看了好几种快速排序的代码,要么是pivot为左边界AC不通过,要么就是边界情况没考虑清楚。属实恶心 下面写了3种AC通过的代码。先介绍下基本知识 快速排序的基本思想是基于分治策略的,其算法思想如下。分解:先从数列中取出一个元素作为基准元素(左、中、右、随机)。以基准元素为标准,将问题分解为两个子序列,使小于或等于基准元素的子序列在左侧,使大于...
参考文章:十大经典排序算法动画,看我就够了!冒泡排序1选择排序1插入排序1归并排序1快速排序1原文:https://www.cnblogs.com/xuehaoyue/p/14332034.html
算法:观察执行过程,找到规律,转为代码。 // 冒泡排序// var arr = [5, 4, 3, 2, 1];var arr = [4, 1, 2, 3, 5];// 外层循环管趟数 【5个元素,冒泡排序4趟,应该是arr.length - 2,结果一样】for (var i = 0; i <= arr.length - 1; i++) {for (var j = 0; j <= arr.length - i - 1; j++) { // 里面的循环管 每一趟的交换次数// 内部交换2个变量的值 前一个和后面一个数组元素相比较if (arr[j] < arr[j + 1]) {var temp =...
驱动程序:public class Main { public static void main(String[] args) { int[] array={2,0,3,4,1,9,6,8,7,5}; print(Sort.bubbleSort(array, true));//冒泡 print(Sort.InsertionSort(array, true));//插入 print(Sort.mergeSort(array,true, "recursion"/*circulate*/));//归并 print(Sort.quickSort(array, true));//快速 print(Sort.radixSort(array, true));//基数 pr...
直接插入排序 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的序列中,知道全部记录插入完成。 排序过程 1.每次插入的数值都要与自己前面的做比较 A.如果大于前面的数,则停止。因为每次都是排好的序列 B.如果小于前面的数,接着向前比较,指导找到自己的位置,插入即可 如右图所示 当插入2时,需要与前面做比较,直到找到自己合适的位置即可 当插入1时,用现在插入的数值依次与前面做比较,直到找到合适的位置...
/** 堆排序有2中实现方式:1. 将数组调整为最小堆O(n) 在不断地删除一个元素 调整为最小堆。 最后将有序数组复制回 A[] 空间复杂度为O(n) 时间复杂度O(n*logn).2. 还有更好的算法思路为: 1.先调整为最大堆 将堆顶元素和最后一个元素交换 2.在对剩下的元素重复操作1.空间复杂度为O(1) 时间复杂度为O(n*log n)。 */ #include "iostream"usingnamespace std; void adjust(int a[],int i,int n) {int temp = a[i];int child;for (; ...
<?php /** * Created by PhpStorm. * User: saint * Date: 15/8/5 * Time: 上午11:49 */ class Demo { public $a = array(3, 6, 9, 2, 4, 7, 1, 5, 8, 0); public function qsort($left, $right) { if($left > $right) { return; } $i = $left; $j = $right; $standard = $this->a[$left]; while($i != $j) { // 从右向左查找比基准数小的单...
1 #include"iostream" 2#define N 103usingnamespace std;4void excha(int &a,int &b);5int main(){6int a[N]={1,3,2,4,5,6,7,8,9,0};7int i,j,min;8for(int i=1;i<N;i++){91011for(int j=i;j>0&&(a[j]<a[j-1]);j--){ 12 excha(a[j],a[j-1]); 13 } 14 } 15for(int i=0;i<N;i++){ 16 cout<<a[i]<<""; 17 } 18return0; 19} 20void excha(int &a,int &b){ 21int c; 22 c=a; 23 a=b; 24 ...
在冒泡排序、选择排序编写代码之后,楼主渐渐找到了coding的信心,熟能生巧,就像写词唱曲之前,都得先背诵大量的诗词,熟悉各路歌曲,才干走出自己的路线,有自己的杰作。好吧,来让楼主继续进行"社会主义0基础阶段"的任务,这次是插入排序。一. 算法描写叙述 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。比如有一个长度为N的无序数组,进行N-1次的插入即能完毕排序;第一次,数组第1个数觉得是...
1. 工作原理(定义) 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序) 计数排序是一种稳定的线性...