排序
来源:互联网 发布:宁波丰年渔具店淘宝店 编辑:程序博客网 时间: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