摘要:
#includeconst int N = 100;int a[N];/**算法导论第一部分,基础知识。P17 插入排序,复杂度O(n^2)*/void insertion_sort( int *a,int n){ for(int i = 1;i =0&&a[j]>key) { a[j+1]=a[j]; j--; } a[j+1] = key; }}int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int ... 阅读全文
摘要:
概述内排序顾名思义待排序元素总数相对与内存而言较小,整个排序过程可以在内存中进行。反之,如果待排序元素总数较多,不能全部放入内存,排序过程需要访问外存,称之为外排序。内排序算法有序多下面是较常见的几种排序算法:按照时间复杂度来划分的话,主要有两种:非线性时间复杂度,下面列举的排序算法的是基于关键字比较和移动两种操作实现的称为“比较排序”,《算法导论》证明过对于任何比较排序在最坏情况下的要Ω(nlgn)次比较来进行排序。1、简单选择排序算法2、直接插入排序算法3、冒泡排序4、快速排序5、两路合并排序6、堆排序线性时间排序,下面的三种算法的用非比较的一些操作来确定顺序。1、计数排序2、基数排序3、 阅读全文
摘要:
//快速排序:#include #define MAX 500000int s[MAX];void Q_Sort(int start,int end){ int i,j,t; if ( start >= end ) return ; t = s[start]; i = start; j = end; while ( i = t && i #define MAX 500000int a[MAX];int b[MAX];void Merge(int left,int mid,int right){ int i,j,k; i = left; j ... 阅读全文
摘要:
[实验内容]1、直接插入排序2、快速排序3、堆排序(要求了解原理) 【实验测试数据】 输入数据:{49,38,65,97,76,13,27,49}#include #define M 8typedef struct{ int key; int other_data;}RecordType;void InsSort(RecordType r[], int length);void QKSort(RecordType r[],int low, int high );int QKPass(RecordType r[],int left,int right);void In... 阅读全文
摘要:
1. 相关知识介绍1.1. 稳定排序和非稳定排序简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,a5就不是稳定的了。1.2. 内排序和外排序在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序; 在排序过程中,只有部分数... 阅读全文