冒泡排序:比较相邻两个数的大小,每次找出最大的,然后循环次数减1
void bubble_sort(int arr[], int len)
{
int i, j,temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
快速排序:第一个数为标准元素,使得数组左边的比它小,右边的比它大
void Qsort(int a[], int low, int high)
{
int i = low, j = high;
int temp = a[low]; // 去第一个元素为标准元素
while(i< j)
{
while(i< j&& a[j] >= temp) j--; // 在数组右端扫描
if(i < j)
{
a[i] = a[j];
i++;
}
while(i< j&& a[i] < temp) i++; // 在数组左端扫描
if(i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = temp;
if(low < i)Qsort(a, low, i-1); // 对左端递归
if(i < high)Qsort(a, j+1, high); // 对右端递归
}
二分查找
int search( int a[], int data, int size )
{
int low = 0, high = size-1;
int mid;
while(low <= high)
{
mid = (low+high) / 2;
if(a[mid] == data) return mid;
else if(a[mid] < data) low = mid + 1;
else if(a[mid] > data) high= mid - 1;
}
return -1; // 查找失败
}