在顺序表中实现折半查找和简单排序

在顺序表中实现折半查找和简单排序

排序:

#include<stdio.h>

#define n 10

void display(int *a, int n)

{

int i;

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

printf("%d ", a[i]);

}

printf("\n");

}

void selectionsort(int *a, int n)

{

int i, j, index, value;

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

index = i;

value = a[i];

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

if (value > a[j]) {

index = j;

value = a[j];

}

a[index] = a[i];

a[i] = value;

display(a, n);

}

}

void main()

{

int a[n],i ;

for(i=0;i<n;i++)

a[i]=n-i;

display(a, n);

selectionsort(a, n);

}

折半查找:

int binarysearch(int number)

{

int mid, start = 0, end = Len - 1;

/* 假定a是排好序的 */

/* mustbe(start, end, number),因为a[start..end]就是整个数组a[0..Len-1] */

while (start <= end) {

/* mustbe(start, end, number),因为一开始进入循环时是正确的,每次循环也都维护了这个条件 */

mid = (start + end) / 2;//取a数组中间的值,与number比较

if (a[mid] < number)

/* 如果a数组中间值小于number,那么number一定要在mid后的后半段数组中,所以我们就将mid+1,将这个作为start,number必然在后半段数组a[mid+1,end]中*/

start = mid + 1;

else if (a[mid] > number)

/如果a数组中间值大于number,那么number一定在mid前的前半段数组中,那么应该将mid-1,这个mid-1就是前半段数组的最后一个元素 */

end = mid - 1;

else

/* a[mid] == number,说明找到了 */

return mid;

}

/*

* mustbe(start, end, number)一直被循环维护着,到这里应该仍然成立,在a[start..end]范围之外一定不存在number,

* 但现在a[start..end]是空序列,在这个范围之外的正是整个数组a,因此整个数组a中都不存在number

*/

return -1;

}

首页