摘要:
目 录1概念2判断方法3常见排序算法的稳定性1概念假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。2判断方法对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。例如,对于如下起泡排序算法,原本是稳定的排序算法 阅读全文
摘要:
最近在学习linux环境高级编程,多进程编程算是编程中的最重要的一个部分了,本文让我学习和明白了很多,所以转载过来。让更多想多线程编程的人学习。只有顶到首页才能让更多的人学习。文章摘要: 多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。本文我们将介绍在Linux下编写多进程和多线程程序的一些初步知识。-------------------------------------------------------------------------------- 正文: Linux下的多... 阅读全文
摘要:
创建进程时经常会用到进程号的类型定义:pid_t。我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:1.首先在/usr/include/sys/types.h中有如下定义#include ...... #ifndef __pid_t_definedtypedef __pid_t pid_t;# define __pid_t_defined#endif可以看到pid_t 其实就是__pid_t类型。2.在/usr/include/bits/types.h中可以看到这样的定义#include #if __.. 阅读全文
摘要:
字符串匹配算法方法一:朴素法:扫描待匹配字符串找出所有匹配子字符串,方法简单直接,这里省略代码方法二:字符串匹配之rabin karp算法用到的结论:(X*Y)%Q = ((X%Q)*Y)%Q/*Filename:rabin_karp_matcher.cpp */#include#include#includeusing namespace std;int chartoint(char in){//字符转换成数字函数 int m = in - '0'; return m;}void rabin_karp_matcher(char *t,char*p,int d,int q){/ 阅读全文
摘要:
/*Filename:gcd.cpp *//*计算两个数的公约数*//*原理:反转相减法*/#includeusing namespace std;int gcd(int a,int b){ int big = a > b?a:b; int small = a > b?b:a; int result = 2; while((result != 1)&&(result != 0)){ result = big - small; big = result > small?result:small; small = result > small?small:r 阅读全文
摘要:
方法一: 直接排序法,这是一种最直观最容易理解的方法,先将数组用某种方法进行排序,然后选取第k大的数,算法的好坏取决与排序算法,常见的排序有,冒泡排序(n^2),擦入排序(n^2),堆排序(nlgn),快速排序(nlgn),归并排序(nlgn),计数排序(n+k),基数排序(n),由于方法简单这里就不给出代码了。方法二:// find_kth.cpp : 定义控制台应用程序的入口点。//方法类似于归并排序,平均时间复杂度O(n),最坏时间复杂度O(n^2)#include "stdafx.h"#includeusing namespace std;int find_the_ 阅读全文
摘要:
github 地址:https://github.com/ImTangYun/comprehensive/blob/master/C%2B%2B/algorithm/heap_sort/heap_sort.cpp// heapsort.cpp : 定义控制台应用程序的入口点。#include "st... 阅读全文
摘要:
/*具体原理:从低位到高位对输入数据个位数字一次进行计数排序*/#include "stdafx.h"#includeusing namespace std;int Location_num(int in,int location){//求一个数的第location位数字int temp = 1;for(int i = 0;i -1;--i){out[--a[Location_num(in[i],location]] = in[i];}}int *Radix_sort(int *in,int length,int maxwidth){//基数排序实现int *Out = n 阅读全文
摘要:
// quick_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;void quick_sort(int *A,int left,int right){//方法一int i = left;int j = right;int flag = left;int key = A[left];while(i != j){while(i = key)j--;if(A[j] key){A[flag] = A[i];flag = i;}}A[flag] = key;for(int k = 0 阅读全文