随笔分类 - 数据结构及算法
数据结构gcc版,在centos6.0下完成
摘要:简单选择排序思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。#incl...
阅读全文
摘要:思想:1、数组A[n]被划分两个字数组A[0..q-1]和A[q+1..n],使得对于数组A[0..q-1]中的元素都小于A[q], A[q+1..n]中的元素都大于等于A[q]。2、通过递归调用快速排序,对字数组A[0..q-1]和A[q+1..n]进行排序。因为两个字数组已经是就地排好序的了,整...
阅读全文
摘要:#include #include bubbleSort(int *p,int length);int main(){ int a[] = {1,3,2,8,5,9,7,6,4,0}; int length = 10; int i; bubbleSort(&a,10); ...
阅读全文
摘要:将一个给定的数组洗牌,要求时间复杂度O(n),空间复杂度1:#includeint randomNum(int start,int end);int shuffle(int *a,int len);int main(void){ int a[10]={0,1,2,3,4,5,6,7,8,9}; int i; printf("洗牌前的数组:"); for(i=0;i<10;i++){ printf("%d ",a[i]); } srand(time(NULL));//刷新随机数 shuffle(&a,10); printf("\n洗
阅读全文
摘要:分支限界法定义:分支定界 (branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。利用分支定界算法对问题的解空间树进行搜索,它的搜索策略是: 1 .产生当前扩展结点的所有孩子结点; 2 .在产生的孩子结点中,抛弃那些不可能产生可行解(或最优解)的结点; 3 .将其余的孩子结点加入活结点表; 4 .从活结点表中选择下一个活结点作为新的扩展结点。如此循环,直到找到问题的可行解(最优解)或活结点表为空。分支限界法的思想是:首先...
阅读全文
摘要:1. 栈的概念栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO(Last In First Out)或先进后出FILO(First In Last Out)线性表。栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。栈底(Bottom):是固定端,又称为表头。空栈:当表中没有元素时称为空栈。2. 线性堆栈实现#ifndef _STACK_H_#define _STACK_H_#define TRUE 1#define FALSE 0#define OVERFLOW -2#define STACK_SIZE 5#define...
阅读全文
摘要:线性结构: ①存在一个唯一的被称为“第一个”的数据元素; ②存在一个唯一的被称为“最后一个”的数据元素; ③除第一个元素外,每个元素均有唯一一个直接前驱; ④除最后一个元素外,每个元素均有唯一一个直接后继线性表(Linear List) : 是由n(n≧0)个数据元素(结点)a1,a2,…an组成的有限序列。该序列中的所有结点具有相同的数据类型。其中数据元素的个数n称为线性表的长度。 当n=0时,称为空表。 当n>0时,将非空的线性表记作:(a1,a2,…an) ,a1称为线性表的第一个(首)结点,an称为线性表的最后一个(尾)结点。顺序存储:把线性表的结点按逻辑顺序依次存放在一...
阅读全文
摘要:1、概念: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。2、常见排序算法的稳定性 不稳定的排序算法:快速排序、希尔排序、堆排序、直接选择排序 稳定的排序算法: 基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序
阅读全文

浙公网安备 33010602011771号