标签:

nO(nlog2n)
keyword
:
112

void print(int a[], int n ,int i){
cout<<i <<":";
for(int j= 0; j<8; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
void InsertSort(int a[], int n)
{
for(int i= 1; i<n; i++){
if(a[i] < a[i-1]){ //ii-1
int j= i-1;
int x = a[i]; //
a[i] = a[i-1]; //
while(x < a[j]){ //
a[j+1] = a[j];
j--; //
}
a[j+1] = x; //
}
print(a,n,i); //
}
}
int main(){
int a[8] = {3,1,5,7,2,4,9,6};
InsertSort(a,8);
print(a,8,8);
}
On^2.
2-
1959 D.L.Shell

d = {n/2 ,n/4, n/8 .....1}
n
dn/2,nd.d/21
void print(int a[], int n ,int i){
cout<<i <<":";
for(int j= 0; j<8; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
/**
*
*
* @param int dk dk=1
*
*/
void ShellInsertSort(int a[], int n, int dk)
{
for(int i= dk; i<n; ++i){
if(a[i] < a[i-dk]){ //ii-1
int j = i-dk;
int x = a[i]; //
a[i] = a[i-dk]; //
while(x < a[j]){ //
a[j+dk] = a[j];
j -= dk; //
}
a[j+dk] = x; //
}
print(a, n,i );
}
}
/**
* dn/2,n
*
*/
void shellSort(int a[], int n){
int dk = n/2;
while( dk >= 1 ){
ShellInsertSort(a, n, dk);
dk = dk/2;
}
}
int main(){
int a[8] = {3,1,5,7,2,4,9,6};
//ShellInsertSort(a,8,1); //
shellSort(a,8); //
print(a,8,8);
}
12n-1n

n
n-1
.....
i i n-i+1 i
void print(int a[], int n ,int i){
cout<<""<<i+1 <<" : ";
for(int j= 0; j<8; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
/**
* 值
*
* @return int 值
*/
int SelectMinKey(int a[], int n, int i)
{
int k = i;
for(int j=i+1 ;j< n; ++j) {
if(a[k] > a[j]) k = j;
}
return k;
}
/**
*
*
*/
void selectSort(int a[], int n){
int key, tmp;
for(int i = 0; i< n; ++i) {
key = SelectMinKey(a, n,i); //
if(key != i){
tmp = a[i]; a[i] = a[key]; a[key] = tmp; //i
}
print(a, n , i);
}
}
int main(){
int a[8] = {3,1,5,7,2,4,9,6};
cout<<"值";
for(int j= 0; j<8; j++){
cout<<a[j] <<" ";
}
cout<<endl<<endl;
selectSort(a, 8);
print(a,8,8);
}
,n[n/2]
void SelectSort(int r[],int n) {
int i ,j , min ,max, tmp;
for (i=1 ;i <= n/2;i++) {
// n/2
min = i; max = i ; //keyword
for (j= i+1; j<= n-i; j++) {
if (r[j] > r[max]) {
max = j ; continue ;
}
if (r[j]< r[min]) {
min = j ;
}
}
//
tmp = r[i-1]; r[i-1] = r[min]; r[min] = tmp;
tmp = r[n-i]; r[n-i] = r[max]; r[max] = tmp;
}
}
nk1,k2,...,kn),

值()值值()
a96, 83,27,38,11,09)
(b) 1236248547305391

nn ()(n-1)n ()n
1. n
2. n-1
n-1
1m m-1
2
3 2.
4 2.
5

n
1n 
2
3
4938659776132749


void print(int a[], int n){
for(int j= 0; j<n; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
/**
* H[sm]H[s]
* H[s],.s,
*
* @param H
* @param s
* @param length
*
*/
void HeapAdjust(int H[],int s, int length)
{
int tmp = H[s];
int child = 2*s+1; //(i+1 )
while (child < length) {
if(child+1 <length && H[child]<H[child+1]) { // ()
++child ;
}
if(H[s]<H[child]) { //
H[s] = H[child]; //
s = child; // s ,
child = 2*s+1;
} else { //
break;
}
H[s] = tmp; //
}
print(H,length);
}
/**
*
* H[0..length-1]
*
*/
void BuildingHeap(int H[], int length)
{
// i= (length -1) / 2
for (int i = (length -1) / 2 ; i >= 0; --i)
HeapAdjust(H,i,length);
}
/**
*
*/
void HeapSort(int H[],int length)
{
//
BuildingHeap(H, length);
//
for (int i = length - 1; i > 0; --i)
{
//H[0]
int temp = H[i]; H[i] = H[0]; H[0] = temp;
//
HeapAdjust(H,0,i);
}
}
int main(){
int H[10] = {3,1,5,7,2,4,9,6,10,8};
cout<<"值";
print(H,10);
HeapSort(H,10);
//selectSort(a, 8);
cout<<"";
print(H,10);
}
:
k
2(k-1)k

4n O(nlogn )

void bubbleSort(int a[], int n){
for(int i =0 ; i< n-1; ++i) {
for(int j = 0; j < n-i-1; ++j) {
if(a[j] > a[j+1])
{
int tmp = a[j] ; a[j] = a[j+1] ; a[j+1] = tmp;
}
}
}
}
exchange
1pos,pos,pos
:
void Bubble_1 ( int r[], int n) {
int i= n -1; //,
while ( i> 0) {
int pos= 0; //,
for (int j= 0; j< i; j++)
if (r[j]> r[j+1]) {
pos= j; //
int tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;
}
i= pos; //
}
}
2值值,值() ,
:
void Bubble_2 ( int r[], int n){
int low = 0;
int high= n -1; //值
int tmp,j;
while (low < high) {
for (j= low; j< high; ++j) //,
if (r[j]> r[j+1]) {
tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;
}
--high; //high值,
for ( j=high; j>low; --j) //,
if (r[j]<r[j-1]) {
tmp = r[j]; r[j]=r[j-1];r[j-1]=tmp;
}
++low; //low值,
}
}
1,,
2值值 值值
3
4
a

b

void print(int a[], int n){
for(int j= 0; j<n; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int a[], int low, int high)
{
int privotKey = a[low]; //
while(low < high){ //
while(low < high && a[high] >= privotKey) --high; //high low+1
swap(&a[low], &a[high]);
while(low < high && a[low] <= privotKey ) ++low;
swap(&a[low], &a[high]);
}
print(a,10);
return low;
}
void quickSort(int a[], int low, int high){
if(low < high){
int privotLoc = partition(a, low, high); //
quickSort(a, low, privotLoc -1); //
quickSort(a, privotLoc + 1, high); //
}
}
int main(){
int a[10] = {3,1,5,7,2,4,9,6,10,8};
cout<<"值";
print(a,10);
quickSort(a,0,9);
cout<<"";
print(a,10);
}
O(nlog2n)
,k,k值 8 ,
void print(int a[], int n){
for(int j= 0; j<n; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int a[], int low, int high)
{
int privotKey = a[low]; //
while(low < high){ //
while(low < high && a[high] >= privotKey) --high; //high low+1
swap(&a[low], &a[high]);
while(low < high && a[low] <= privotKey ) ++low;
swap(&a[low], &a[high]);
}
print(a,10);
return low;
}
void qsort_improve(int r[ ],int low,int high, int k){
if( high -low > k ) { //k, k
int pivot = partition(r, low, high); // Partition
qsort_improve(r, low, pivot - 1,k);
qsort_improve(r, pivot + 1, high,k);
}
}
void quickSort(int r[], int n, int k){
qsort_improve(r,0,n,k);//Qsort
//
for(int i=1; i<=n;i ++){
int tmp = r[i];
int j=i-1;
while(tmp < r[j]){
r[j+1]=r[j]; j=j-1;
}
r[j+1] = tmp;
}
}
int main(){
int a[10] = {3,1,5,7,2,4,9,6,10,8};
cout<<"值";
print(a,10);
quickSort(a,9,4);
cout<<"";
print(a,10);
}
Merge

r[in]r[im]r[m+1n]n-i +1n-m
//r[im]r[m +1 n]rf[in]
void Merge(ElemType *r,ElemType *rf, int i, int m, int n)
{
int j,k;
for(j=m+1,k=i; i<=m && j <=n ; ++k){
if(r[j] < r[i]) rf[k] = r[j++];
else rf[k] = r[i++];
}
while(i <= m) rf[k++] = r[i++];
while(j <= n) rf[k++] = r[j++];
}
1 n 1 n/21 2n
void print(int a[], int n){
for(int j= 0; j<n; j++){
cout<<a[j] <<" ";
}
cout<<endl;
}
//r[im]r[m +1 n]rf[in]
void Merge(ElemType *r,ElemType *rf, int i, int m, int n)
{
int j,k;
for(j=m+1,k=i; i<=m && j <=n ; ++k){
if(r[j] < r[i]) rf[k] = r[j++];
else rf[k] = r[i++];
}
while(i <= m) rf[k++] = r[i++];
while(j <= n) rf[k++] = r[j++];
print(rf,n+1);
}
void MergeSort(ElemType *r, ElemType *rf, int lenght)
{
int len = 1;
ElemType *q = r ;
ElemType *tmp ;
while(len < lenght) {
int s = len;
len = 2 * s ;
int i = 0;
while(i+ len <lenght){
Merge(q, rf, i, i+ s-1, i+ len-1 ); //
i = i+ len;
}
if(i + s < lenght){
Merge(q, rf, i, i+ s -1, lenght -1); //
}
tmp = q; q = rf; rf = tmp; //q,rfq rf
}
}
int main(){
int a[10] = {3,1,5,7,2,4,9,6,10,8};
int b[10];
MergeSort(a, b, 10);
print(b,10);
cout<<"";
print(a,10);
}
void MSort(ElemType *r, ElemType *rf,int s, int t)
{
ElemType *rf2;
if(s==t) r[s] = rf[s];
else
{
int m=(s+t)/2; /**p */
MSort(r, rf2, s, m); /*p[sm]p2[sm]*/
MSort(r, rf2, m+1, t); /*p[m+1t]p2[m+1t]*/
Merge(rf2, rf, s, m+1,t); /*p2[sm]p2[m+1t]p1[st]*/
}
}
void MergeSort_recursive(ElemType *r, ElemType *rf, int n)
{ /**p */
MSort(r, rf,0, n-1);
}
值n O(n log n)
[1..1000]nA[1..n]
10B[1][1..10]B[2] (10..20]B[i]( (i-1)*10, i*10]i = 1,2,..100 100
A[1..n]A[i]B[j] 100
nmn/m
O(n + m * n/m*log(n/m)) = O(n + nlogn - nlogm)
mnO(n)
n
On2O(nlogn)On
1值0m-1mm
2
keywordO(n)
:
52 值
< < < 
值 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A
值


值值
14 值4
213 值13 (2 3 ...A )值13 4 ()23 4 值4
n d {k1k2kd}{k1k2kd}r[i]r[j](1ijn)

k1 kd
(Most Significant Digit first)MSD
1k1 k1
2k2 kd
3值MSD
(Least Significant Digit first)LSD
1) kd kd-1k1
2) , 值LSD
LSD
keywordkeywordkeywordkeyword-值4值13值4值13
:
Void RadixSort(Node L[],length,maxradix)
{
int m,n,k,lsp;
k=1;m=1;
int temp[10][length-1];
Empty(temp); //
while(k<maxradix) //keyword
{
for(int i=0;i<length;i++) //
{
if(L[i]<m)
Temp[0][n]=L[i];
else
Lsp=(L[i]/m)%10; //keyword
Temp[lsp][n]=L[i];
n++;
}
CollectElement(L,Temp); //
n=0;
m=m*10;
k++;
}
}


O(n)

nO(nlog2n)
(1)(O(n2))
:
(2)(O(nlog2n))
(3)O(n1+)),01
(4)(O(n))
On
On2
:keyword
1n
2keyword
3keyword
4
n.
1nO(nlog2n)
keyword
2 n =
3n
5
6
1keyword
2keyword
3
http://blog.csdn.net/hguisu/article/details/7776068
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/4557717.html