常用查找排序算法

1.折半查找算法:

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

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

#define LEN 8
int 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 5
int 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;
}

 

posted on 2014-07-11 12:07  菜菜鸟向前进  阅读(193)  评论(0编辑  收藏  举报