冒泡排序+选择排序+快速排序

来源:互联网 发布:网络购彩最新消息2016 编辑:程序博客网 时间:2024/05/16 05:22

一. 冒泡排序

冒泡思想比较简单,直接上代码

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完美编译运行



1 0
原创粉丝点击