首页 > 代码库 > 常用查找排序算法

常用查找排序算法

1.折半查找算法:

对于一个已排好序的数组,若要查找某元素是否属于数组中,则可以用这种算法。

返回找到的元素在数组中的下标,找不到则返回-1 #include <stdio.h>

#define LEN 8int a[LEN] = { 1, 3, 3, 3, 4, 5, 6, 7 };int binarysearch(int number){	int mid, start = 0, end = LEN - 1;	while (start <= end) {		mid = (start + end) / 2;		if (a[mid] < number)			start = mid + 1;		else if (a[mid] > number)			end = mid - 1;		else			return mid;	}	return -1;}
折半查找的递归实现:
int binarysearch(int number,int start,int end){
int mid;
if(start <= end) {
mid = (start + end) / 2;
if (a[mid] < number)
 binarysearch(number,mid+1,end);
		else if (a[mid] > number)
binarysearch(number,start,mid-1);
		else		   return mid;	}	return -1;}

2.选择排序法:总需排N-1次
算法:
第1次:找到数组中的最小的元素与第一个元素交换位置
第2次:从第二个元素开始,找到当前数组中的最小元素与第二个元素交换位置
第3次:从第三个元素开始,找到当前数组中的最小元素与第三个元素交换位置
.
.
.
第N-1: 同上。。。

    void sort(int list[],int n){

       int i,j,min,temp;

       for(i = 0;i<n-1;i++){

          min = i;

          for(j = i+1;j<n;j++)

               if(list[j]<list[min])

                  min = j;

         temp = list[i];

         list[i] = list[min];

         list[min] = temp;

     }

}

3.插入排序算法类似于玩扑克时抓牌的过程,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。

 

#include <stdio.h>#define LEN 5int a[LEN] = { 10, 5, 2, 4, 7 };void insertion_sort(void){	int i, j, key;	for (j = 1; j < LEN; ++j) {		printf("%d, %d, %d, %d, %d\n",		       a[0], a[1], a[2], a[3], a[4]);		key = a[j];		i = j - 1;		while (i >= 0 && a[i] > key) {			a[i+1] = a[i];			--i;		}		a[i+1] = key;	}	printf("%d, %d, %d, %d, %d\n",	       a[0], a[1], a[2], a[3], a[4]);}int main(void){	insertion_sort();	return 0;}