排序

来源:互联网 发布:宁波丰年渔具店淘宝店 编辑:程序博客网 时间:2024/05/24 06:28
#include "stdafx.h"#include <stdio.h>#include "SortFun.h"#include <stdlib.h>void ShowArray(int aNum[],int N){   int i = 0;   for( i = 0; i < N ; i++)   {      printf("%d ",aNum[i]);   }   printf("\n");}void BubbleSort(int aNum[],int N)//冒泡排序{   int i = 0;   int j = 0;   int nTemp = 0;   bool bFlag = 0;   for( i = 0; i < N -1; i++)   {      bFlag = 0;      for( j = 0; j < N - i -1; j++)  {           if( aNum[j] > aNum[j+1])   {      nTemp = aNum[j+1];  aNum[j+1] = aNum[j];  aNum[j] = nTemp;  bFlag = 1;   }     }  if( 0 == bFlag)  {     break;  }     }}void InsertSort(int aNum[],int N)//插入排序{     int i = 0; int j = 0; int nTemp = 0; for( i = 1 ; i < N ; i++ ) {      nTemp = aNum[i];  j = i-1;  while( j >= 0 && nTemp < aNum[j])  {      aNum[j+1] = aNum[j];  j--;  }  aNum[j+1] = nTemp; }}void ShellSort(int aNum[],int N)//希尔排序{    int  nGroup = N/2;int  nTemp = 0;int  i = 0;    int  j = 0;while( nGroup > 0){     for( i = nGroup; i < N ;i++) { nTemp = aNum[i]; j = i -nGroup;     while( j >=0 && nTemp < aNum[j]) {    aNum[j+nGroup] = aNum[j];aNum[j] = nTemp;j = j - nGroup; } } nGroup = nGroup/2;}}void QuickSort(int aNum[],int Left,int Right){     int i = Left; int j = Right; int nTemp = aNum[i]; while( i < j) {    while( i < j && aNum[j] >= nTemp){  j--;}if( i < j){   aNum[i] = aNum[j];   i++;}while( i < j && aNum[i] < nTemp){   i++;}if( i < j){   aNum[j] = aNum[i];   j--;}  }     aNum[i] = nTemp; if( Left < i-1) {   QuickSort(aNum,Left,i-1); } if( i+1 < Right) {   QuickSort(aNum,i+1,Right); }}void Merge( int aNum[],int low,int mid,int high){   int i = low;   int j = mid+1;   int k = 0;   int *NewArr = (int*)malloc(sizeof(int) * (high-low +1));   if( NULL == NewArr)   {     return;   }   while( i <= mid && j <=high)   {      if( aNum[i] <= aNum[j])  {     NewArr[k++] = aNum[i++];  }  else  {    NewArr[k++] = aNum[j++];  }   }   while( i <= mid)   {      NewArr[k++] = aNum[i++];   }   while( j <= high)   {     NewArr[k++] = aNum[j++];   }   for( k = 0,i = low; i <= high; i++,k++)   {     aNum[i] = NewArr[k];   }   free(NewArr);}void MergeSort(int aNum[],int N){      for( int Len = 1; Len < N-1 ; Len = Len*2)   {      for( int i = 0; i+ 2*Len-1 <= N-1; i = i+2*Len)  {     Merge(aNum,i,i+Len-1,i+2*Len-1);  }      if( i+Len-1 <N-1)  {    Merge(aNum,i,i+Len-1,N-1);  }      }}void HeapAdjust(int aNum[],int nIndex,int N){    int lChild = 2*nIndex+1;int rChild = 2*nIndex+2;int nTemp = 0;int nMax = nIndex;if( nIndex <= N/2){if( lChild <= N && aNum[nMax] < aNum[lChild]){   nMax = lChild;}if( rChild <= N && aNum[nMax] < aNum[rChild]){   nMax = rChild;}if( nMax != nIndex){    nTemp = aNum[nMax];aNum[nMax] = aNum[nIndex];    aNum[nIndex] = nTemp;           HeapAdjust(aNum,nMax,N);}}}void HeapSort(int aNum[],int N){int nTemp = 0;for(int i = N/2; i >= 0; i--){  HeapAdjust(aNum,i,N);}   for(i = N ; i >= 0; i--)   {      nTemp = aNum[i];  aNum[i] =aNum[0];  aNum[0] = nTemp;  HeapAdjust(aNum,0,i-1);   }}

0 0