1. 程式人生 > >C實現9種排序算法

C實現9種排序算法

() stdlib.h define ble 冒泡 length stdio.h ins main

#include <stdio.h> #include <stdlib.h> #define LENGTH(s) (sizeof(s)/sizeof(int)) #define SWAP(x,y) {long t; t=x; x=y; y=t;} //冒泡排序 void BubbleSort(int **p,int len){ int i,j; for(i=0;i<len;i++){//外層控制循環次數 for(j=0;j<len-i;j++){//控制交換次數 if((*p)[j]>(*p)[j+1]){
SWAP((*p)[j],(*p)[j+1]); } } } } //選擇排序 void SelectSort(int **p,int len){ int i,j,k; for(i=0;i<len;i++){ k=i; for(j=i+1;j<len;j++){ if((*p)[k]>(*p)[j]){ k=j; } }
if(k!=i){ SWAP((*p)[k],(*p)[i]); } } } //插入排序 void InsertSort(int **p,int len){ int i,j,k; for(i=1;i<len;i++){ k=(*p)[i]; for(j=i-1;j>=0;j--){ if((*p)[j]>k){ (*p)[j+1]=(*p)[j]; }else{
break; } } (*p)[j+1]=k; } } //快速排序 void QuickSort(int **p,int min,int max){ int i,j,k; if(min<max){ i=min;j=max;k=(*p)[i]; while(i<j){ while(i<j && (*p)[j]>k) j--; if(i<j) (*p)[i++]=(*p)[j]; while(i<j && (*p)[i]<k) i++; if(i<j) (*p)[j--]=(*p)[i]; } (*p)[i]=k; QuickSort(p,min,i-1); QuickSort(p,i+1,max); } } void main(){ int arr[]={1233,22,38,99,90,1,23,45,394,2,384,45,100,-10,22}; int i,*p=arr; int len=LENGTH(arr); //BubbleSort(&p,len); //SelectSort(&p,len); //InsertSort(&p,len); QuickSort(&p,0,len); for(i=0;i<len;i++){ printf("%d\n",arr[i]); } }

C實現9種排序算法