入学c,开始熟悉gcc,g++,熟悉算法
/*
2011-9-18
writen by qiya
*/
#include <stdio.h>
#include <time.h>#include <stdlib.h>
const int size = 10;
void insert_sort(int a[], int n)
{
int i, j, key;
for(i = 1; i < n; i++) {
j = i-1; key = a[i];
while(j >= 0 && key > a[j]) {
a[j+1] = a[j]; j--;
}
j = j+1; a[j] = key;
}
}
int main()
{
int i;
int *a = (int *)malloc(size * sizeof(int));
srand(time(NULL));
for(i = 0; i < size; i++) {
a[i] = rand()%size;
}
for(i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
insert_sort(a, size);
for(i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
/*
折半插入排序
可以减小比较次数,但最坏时间还是O(n^2)
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int size = 20;
int binary_search(int a[], int left, int right, int key)
{
while(left <= right) {
int mid = (left + right)/2;
if(key < a[mid]) right = mid - 1;
else left = mid + 1;
}
return right + 1;
}
void binary_insert_sort(int a[], int n)
{
int i, j, key, left, right, location;
for(i = 1; i < n; i++) {
key = a[i];
left = 0; right = i - 1;
location = binary_search(a, left, right, key);
for(j = i-1; j >= location; --j)
a[j+1] = a[j];
a[location] = key;
}
}
int main()
{
int i;
int *a = (int *)malloc(size * sizeof(int));
srand(time(NULL));
for(i = 0; i < size; i++) {
a[i] = rand() % size;
}
for(i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
binary_insert_sort(a, size);
for(i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}