10 2011 档案
摘要:复杂度: O(n2)#include<stdio.h>voidInsertSort(int*a,intsize){inttemp,j;for(intstart=1;start<size;start++){temp=a[start];for(j=start;j>0&&(temp<a[j-1]);j--){a[j]=a[j-1];}a[j]=temp;}}voidprint_content(int*a,intsize){for(inti=0;i<size;i++){printf("%d\t",a[i]);}printf(&qu
阅读全文
摘要:复杂度:O (n log n)2路归并排序的基本思想:n个记录,看作n个有序子序列,每个子序列的长度为1,然后两两归并,得到n/2(向上取整)个长度为2或者1的有序子序列;再两两归并,......,如此重复,知道得到一个长度为n的有序序列位置。#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>voidmerge(intarray[],intlow,intmid,inthigh){inti,k;int*temp=(int*)malloc((high-low+
阅读全文
摘要:复杂度:O(n log n)基本思想:通过一趟排序讲待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。#include<stdio.h>intPartition(int*a,intlow,inthigh){ intpivotkey=a[low];//注意左右分别对应传入的lowhighwhile(low<high){while(low<high&&a[high]>=pivotkey)//中枢要比右边的小--high;a[low]=a[high];//发现一个比中枢
阅读全文
摘要:复杂度:O(n2)基本思想:每一趟在n-i+1 (i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。#include<stdio.h>intSelectMinKey(int*a,intibound){intmin=a[ibound];for(inti=ibound+1;i<sizeof(a)/sizeof(a[0]);i++){if(min>a[i])min=a[i];}returnmin;}voidSelectSort(int*a,intsize){inttempi;for(inti=1;i<size;i++){intj=Sel
阅读全文