一. 冒泡排序
冒泡思想比较简单,直接上代码
void BubbleSort(int num[], int n){
int i,j;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(num[i]>num[j]){
swap(&num[i], &num[j]);
}
}
}
}
二. 选择排序
选择排序和冒泡写起来比较像,不过冒泡是碰到更小的就交换,而选择是先找到最小的,然后交换,一次循环只交换一次,废话不多说,上代码
void SelectionSort(int num[], int n){
int i,j,min;
for(i=0;i<n;i++){
min = i;
//找出最小值
for(j=i+1;j<n;j++){
if(num[min] > num[j])
min = j;
}
//交换
if(min != i){
swap(&num[i], &num[min]);
}
}
}
三. 快速排序
快速排序稍微复杂点,不过理解起来也不难,就是先通过查找交换,找到一个num[i]使num[i]前面的数都小于num[i],后面的都大于num[i],然后对num[0]...num[i-1]和num[i+1]...num[n-1]这两个子数组进行同样的操作,直到子数组只剩1个元素停止。上代码
void QuickSort(int num[], int p_low, int p_high){
int low = p_low, high = p_high;
if(low >= high)
return;
//直到low和high都到中间
while(low < high){
//low向中间移动
while(num[low] <= num[high]){
if(low>=high)
break;
low++;
}
swap(&num[low], &num[high]);
//high向中间移动
while(num[low] <= num[high]){
if(low>=high)
break;
high--;
}
swap(&num[low], &num[high]);
}
//处理两边
QuickSort(num, p_low, low-1);
QuickSort(num, low+1, p_high);
}
另外贴出swap代码
void swap(int *a, int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
注:以上代码在VC6.0完美编译运行