算法复杂度,及三种主要排序算法的研究

一、时间复杂度

  1、时间频度  T(n),n为问题的规模

    即--算法中语句的执行次数。又叫语句频度。

  2、时间复杂度

    记作 O( f(n) ),这里的f(n)是一个T(n)的同数量级函数。

     如O(1)表示算法的语句执行次数为一个常数,不随规模n的增长而增长;

    又如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同,

    但时间复杂度相同,都为O(n^2)。

    

  3、算法的性能

    主要用算法的 时间复杂度 的数量级来评价一个算法的时间性能。

二、空间复杂度

  S(n),包括3方面:

  1、算法程序的空间

  2、初始数据所占的空间

  3、算法执行过程中需要的额外空间

三、三种算法---参考了http://blog.chinaunix.net/uid-23860671-id-150518.html


public class MainSort {
private static int[] data = {66,22,55,44,11,33};
private static int LENGTH = data.length;

public static void main(String args[]){
System.out.println("hello world");
sortByChoose();
System.out.println("result is:");
printData();

}
private static void printData() {
for(int i = 0; i<LENGTH; i++){
System.out.print("*"+data[i]);
}
System.out.print("*");
System.out.println("");

}
//选择排序 -- 外层遍历每次找出最小的,放到前面,下次只遍历未排序的后面一段
private static void sortByChoose(){

for(int unsortSize = LENGTH ; unsortSize>0 ; unsortSize--){

int temp = LENGTH-unsortSize;

for(int j = LENGTH-unsortSize ; j<LENGTH; j++){ //遍历未排序的找出最小的数的角标

if(data[temp] > data[j]){
temp = j;
}

}
System.out.println(""+temp);

int x = data[LENGTH-unsortSize];
data[LENGTH-unsortSize] = data[temp];
data[temp] = x;

printData();
}
}
//插入排序
private static void sortByInsert(){

}
//冒泡排序
private static void sortByPop(){

}
}

算法复杂度,及三种主要排序算法的研究,布布扣,bubuko.com

时间: 2024-10-06 00:40:17

算法复杂度,及三种主要排序算法的研究的相关文章

算法:三种简单排序算法

排序算法比较常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和快速排序算法等.今天先学习一下前面三种比较简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等,排序过后仍然是原来的顺序则为稳定排序. ②内部排序:排序过程都在内存中进行:外部排序:需要对外存进行访问的排序过程. ③内排序算法性能因素:1.时间性能,比较与移动:2.辅助空间:3.算法复杂性 实例:冒泡排序.简单选择排序与直接插入排序 #include "stdio.h" #define

三种线性排序算法(计数、基数、桶排序)的简单实现

一.计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 基本思想: 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将x直接放置在它在最终输出数组中的位置上. 如下图所示: 由于数组中可能有相等的数,在处理时需要注意. 时间复杂度和空间复杂度分析 算法总时间Θ(k + n).当k=O(n)时,计数排序的运行时间是Θ(n). 空间复杂度是O(n+k).需要两个辅助数组:存放排序结果的数组B[n],存放临时结果的

三种简单排序算法(java实现)

一.冒泡排序 算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端.重复操                   作,直到排序完成. 示例演示: 算法实现: 1 for(int i=0;i<array.length-1;i++){//最多排序n-1次 2 for(int j=0;j<array.length-i-1;j++){//需要交换的次数 3 if(array[j]>array[j+1]){ 4 i

三种基础排序算法总结

一.冒泡排序 1.算法思想: 1).两层循环,外层循环i从0开始,内层循环从j=i+1开始2).如果ary[i] < ary[j],则交换其值3).直到外层循环到length-1 2.主算法实现 public static void bubbleSort(int[] ary){ int length = ary.length; //每完成一轮外层循环,ary[i]的次序在全局确定 for (int i = 0; i < length; i++) { //内层循环向后扫描,且立即交换. for

三种全排序算法详解

1.全排列的非去重递归算法 算法思路:全排列可以看做固定前i位,对第i+1位之后的再进行全排列,比如固定第一位,后面跟着n-1位的全排列.那么解决n-1位元素的全排列就能解决n位元素的全排列了,这样的设计很容易就能用递归实现. 附代码段: void permutation1(char* str,int sbegin,int send) //全排列的非去重递归算法 { if( sbegin == send) //当 sbegin = send时输出 { for(int i = 0;i <= sen

7种基本排序算法的Java实现

7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 1 /** 2 * 直接插入排序 3 * 不稳定 4 * 时间复杂度:O(n^2) 5 * 最差时间复杂度:O(n^2) 6 * 空间复杂度:O(1) 7 * 使用场景:大部分元素有序 8 * @param elements 9 * @param comparator 10 * @param <T> 11 */ 1

七种常用排序算法

七种常用排序算法 一.常见排序算法一览: 时间复杂度: 是一个函数,它定量描述了该算法的运行时间. 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度. 稳定性:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同就稳定,反之不稳定. 视觉直观感受 7 种常用的排序算法 二.算法C#实现: 1. 直接插入排序: using System; using System.Collections.Generic; using System.Linq; using Sys

几种常见排序算法

几种常见排序算法 几种常见排序算法 写在前面 基础介绍 初级排序算法 selection sort选择排序 insertion sort插入排序 ShellSort希尔排序 shuffing不是排序算法 merge sort归并排序 Abstract in-place merge原地归并的抽象方法 Top-down mergesort自顶向下的归并排序 Bottom-up mergesort自底向上的归并排序 quicksort 三向切分的快速排序 Heapsort堆排序 总结和比较 命题 本文

七种经典排序算法最全攻略

经典排序算法在面试中占有很大的比重,也是基础.包括冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序.希望能帮助到有需要的同学.全部程序采用JAVA实现. 本篇博客所有排序实现均默认从小到大. 一.冒泡排序 BubbleSort 介绍: 冒泡排序的原理非常简单,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. 步骤: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对第0个到第n-1个数据做同样的工作.这时,最大的数就"浮"到了