一切成功都源于积累!
为痛下决心要改掉眼高手低的毛病,每天一道算法题!
先从最简单的冒泡排序开始吧。
//冒泡排序 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);
}