算法导论
huanle543
这个作者很懒,什么都没留下…
展开
-
计数排序
#include "stdafx.h"void Counting_Sort(int a[], int b[], int k,int len){ int c[100]; for (int i = 0; i < k+1; ++i) { c[i] = 0; } for (int j = 0; j < len; ++j)原创 2015-11-14 18:01:34 · 194 阅读 · 0 评论 -
Random_QuickSort
#include "stdafx.h"int PARTITION(int a[], int p, int r) //以递增顺序排序{ int x = a[r]; int i = p - 1; for (int j = p; j < r; ++j) { if (a[j]原创 2015-11-18 10:49:16 · 445 阅读 · 0 评论 -
修改归并排序实现逆序对计数
若i<j,且A[i]>A[j],则对偶(i,j)称为A的一个逆序对。#include "stdafx.h"void MERGE(int a[], int p, int q, int r,int &count) //p,q,r皆为数组元素序号{ //static int temp1 = q - p + 1; int temp2 = r - q; //将原创 2015-11-02 17:47:52 · 689 阅读 · 0 评论 -
冒泡法排序
#include "stdafx.h"void Bubble_Sort(int a[],int len){ //int len = sizeof(a) / 4; for (int i = 0; i < len;++i) { for (int j = len-1; j > i;--j) { if (a[j]<a[j-1]原创 2015-11-02 17:45:00 · 276 阅读 · 0 评论 -
归并排序
#include "stdafx.h"void MERGE(int a[], int p, int q, int r) //p,q,r皆为数组元素序号{ int temp1 = q - p+1; int temp2 = r - q; //将拆分的两部分数组分别存入新的数组 int *bArray; int *cArray; bArray原创 2015-11-02 17:42:54 · 206 阅读 · 0 评论 -
Random_Select
#include "stdafx.h"int PARTITION(int a[], int p, int r) //以递增顺序排序{ int x = a[r]; int i = p - 1; for (int j = p; j < r; ++j) { if (a[j]原创 2015-11-18 14:49:19 · 968 阅读 · 0 评论 -
同时得到最大最小值的最优算法
首先,我们将一对输入元素进行比较,然后把较小的值与最小值比较,较大值与最大值比较。这样,每两个元素共需3次比较。如果n是奇数,就把最大最小值的初值都设为第一个元素的值,然后成对处理剩下的元素;如果n是偶数,则先比较前两个元素,决定最大最小值的初值,然后成对处理剩下的元素。#include "stdafx.h"struct Max_Min{public: int max; i原创 2015-11-18 08:51:18 · 3199 阅读 · 0 评论 -
插入排序
1.从小到大排列#include "stdafx.h"void insert_sort(int a[],int len){ int temp,i; for (int j = 1; j < len ; ++j) { temp = a[j]; i = j - 1; while (i>-1 && a[i] > temp)原创 2015-10-31 17:27:30 · 201 阅读 · 0 评论 -
最大堆
#include "stdafx.h"void MAX_HEAPIFY(int a[], int i,int len){ int l = 2 * i+1, r = 2 * i + 2; int largest = i; //预设该节点为最大 if (l<=len &&a[l]>a[i])原创 2015-11-14 18:10:12 · 213 阅读 · 0 评论 -
堆排序
#include "stdafx.h"void MAX_HEAPIFY(int a[], int i, int len){ int l = 2 * i + 1, r = 2 * i + 2; int largest = i; //预设该节点为最大 if (l <= len &&a[l]原创 2015-11-14 18:09:28 · 203 阅读 · 0 评论 -
基数排序
#include "stdafx.h"void Counting_Sort(int a[], int b[], int k, int len){ int c[100] = { 0 }, temp[100] = { 0 }; for (int j = 0; j < len; ++j) //统计等于i的个数 {原创 2015-11-14 18:02:16 · 198 阅读 · 0 评论 -
快速排序
1.以递增顺序排序#include "stdafx.h"int PARTITION(int a[], int p, int r) //以递增顺序排序{ int x = a[r]; int i = p - 1; for (int j = p; j < r;++j) {原创 2015-11-14 18:12:01 · 222 阅读 · 0 评论 -
最小堆
#include "stdafx.h"void MIN_HEAPIFY(int a[], int i,int len){ int l = 2 * i + 1, r = 2 * i + 2; int smallest = i; //预设该节点为最大 if (l <= len &&a[l]原创 2015-11-14 18:10:42 · 265 阅读 · 0 评论 -
最大子数组
#include "stdafx.h"struct result{public: int left, right, sum;};struct result Find_Max_Crossing_Subarray(int a[],int low,int mid,int high){ result cross; int left_sum = -1000,right_sum原创 2015-11-14 18:08:33 · 231 阅读 · 0 评论 -
变长数据项排序
a.// Al_8-3_a.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"struct bucket{ double value; bucket *next;};bucket *buckets[100];bucket *insert(bucket *head, double m){ bucket *p0, *p1, *p2;原创 2015-11-14 18:04:14 · 348 阅读 · 0 评论 -
二分查找
#include "stdafx.h"int Binary_Sort(int a[], int i, int j, int value){ if (i<=j) { int mid = (i + j) / 2; if (value <a[mid]) { Binary_Sort(a, i, mid - 1, val原创 2015-11-02 17:44:27 · 210 阅读 · 0 评论