一日一码01——冒泡排序

来源:互联网 发布:dwg for mac 免费 编辑:程序博客网 时间:2024/05/21 04:24

一切成功都源于积累!

为痛下决心要改掉眼高手低的毛病,每天一道算法题!

先从最简单的冒泡排序开始吧。


//冒泡排序2013/09/06//从小到大排序#include <stdio.h>#include <stdlib.h>#include <time.h>#include <malloc.h>//每次把最后的数向前比较,小的数从后往前“冒泡”,下次比较仍从最后比起,前面已排序部分无需比较void soapSort(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = n - 1 ; j > i ; j-- ){if(a[j] < a[j-1]){tmp = a[j];a[j] = a[j-1];a[j-1] = tmp;flag = 1;}}if(flag == 0){return;}}}//每次把前面的数向后比较,大的数从前往后“冒泡”,下次比较仍从前面比起,后面已排序部分无需比较void soapSort2(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = 0 ; j < n-i-1 ; j++ ){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 1;}}if(flag == 0){return;}}}//错误方法,只是每次把最大的放到最后,前面的数实际上没有排序void soapSort_error(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = i ; j < n - 1; j++ ){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 1;}}if(flag == 0){return;}}}int initArr(int** a){int i,n;srand(time(NULL));printf("Input the size of array:");scanf("%d",&n);*a = (int *)malloc(n*sizeof(int));for(i = 0; i < n; i++){(*a)[i] = rand()%100; //*(*a+i) = rand()%100;}return n;}void printArr(int* a, int n){int i;for (i = 0;i < n; i++){printf("%d,",a[i]);}printf("\n");}void main(){int* arr;int n;n = initArr(&arr);//传地址printArr(arr,n);soapSort(arr,n);printArr(arr,n);}


 

原创粉丝点击