冒泡法
void sort(int *ar, int num)
{
int i, j;
int t;
int flag = 0;
print(ar, num);
for(i = 1; i < num; i++) //num个数需要排num - 1次
{
flag = 0;
for(j = 0; j < num - i; j++) //每次只需对前num - i个数排序
{
if(ar[j] > ar[j+1]) //如果第j个数比它后面一个数大,就要交换
{
t = ar[j];
ar[j] = ar[j+1];
ar[j+1] = t;
flag = 1;
}
}
if(flag == 0) //如果flag == 0表明本次排序没有经过一个交换,所以说明它己经有序了,就不用再循环
{
break;
}
print(ar, num);
}
print(ar, num);
}
-----------------------------------------------------------
简单排序法
void sort(int *ar, int num)
{
int i, j, t, min;
print(ar, num);
for(i = 0; i < num - 1; i++)
{
min = i; //假设最小的一个数的下标就是i
for(j = i + 1; j < num; j++)
{
if(ar[min] > ar[j])
{
min = j; //用min保存最小的数的下标
}
}
if(min != i) //把最小的那个数放到i这个位置
{
t = ar[min];
ar[min] = ar[i];
ar[i] = t;
}
}
print(ar, num);
}
---------------------------------------------
插入排序算法
void sort(int *ar, int num)
{
int i, j, t;
print(ar, num);
for(i = 1; i < num; i++) //取出第i个数,用来和它前面的i - 1个数进行比较
{
for(j = i - 1; j >= 0; j--)
{
if(ar[i] >= ar[j])
break;
}
if(j != i - 1)
{
t = ar[i];
memmove(&ar[j+2], &ar[j+1], (i - j - 1) * sizeof(int)); //把j之后的(i - j - 1)个数据通通向后移动一个位置
ar[j+1] = t;
}
print(ar, num);
}
print(ar, num);
}
--------------------------------------------
快速排序算法
void sort(int *ar, int left, int right)
{
int l = left, r = right;
int t;
if(r > l)
{
t = ar[l]; //从数组左边取一个数
while(r > l)
{
while(r > l)
{
if(ar[r] <= t) //从右边找一个比t小的数
{
ar[l] = ar[r]; //把找到的数放到ar[l]中
l++;
break;
}
r--;
}
while(r > l)
{
if(ar[l] > t) //从右边找一个比t大的数
{
ar[r] = ar[l]; //把找到的数放到ar[r]中
r--;
break;
}
l++;
}
}
ar[l] = t; //把之前的t主回到最后空出来的那个位置
sort(ar, left, l - 1); //把序列的左半部份重复之前的排序
sort(ar, l + 1, right); //把序列的右半部份重复之前的排序
}
}
-----------------------------------------
二分法查找
int bfind(int* a,int len,int val)
{
int m = len/2;
int l = 0;
int r = len;
while(l!=m && r!= m)
{
if(a[m] > val)
{
r = m;
m = (m+l)/2;
}
else if(a[m] < val)
{
l = m;
m = (m+r)/2;
}
else
return m;
}
return -1; //没有找到
}