Shell排序

c程序:

/*
 *	shell sort
 *
 *	yangjie 2011-02-14 09:20
 */

#include <stdio.h>

void shell_sort(int *a, int size);

int main(int argc, char *argv[])
{
	int i = 0;
	int a[] = {34, 1, 45, 23, 12, 4, 13, 65, 9, 10};
	
	shell_sort(a, 10);
	
	for (i = 0; i < 10; i ++) {
		printf("%d\n", a[i]);
	}
	
	return 0;
}

void shell_sort(int *a, int size)
{
	int gap = 0;
	int i = 0;
	int j = 0;

	for (gap = size / 2; gap > 0; gap /= 2) {
		for (i = gap; i < size; i ++) {
			int temp = a[i];
			for (j = i; j >= gap && temp < a[j - gap]; j -= gap) {
				a[j] = a[j - gap];
			}
			a[j] = temp;
		}
	}
}

C++程序:

//
//	shell-sort.cc
//	yangjie 2011-02-14 09:35
//

#include <iostream>
#include <vector>
using namespace std;

template<class T>
void shell_sort(vector<T> &a)
{
	int gap = 0;
	int i = 0;
	
	for (gap = a.size() / 2; gap > 0; gap /= 2) {
		for (i = gap; i < a.size(); i ++) {
			T temp = a[i];
			int j = i;
			for (; j >= gap && temp < a[j - gap]; j -= gap) {
				a[j] = a[j - gap];
			}
			a[j] = temp;
		}
	}
}

int main(int argc, char **argv)
{
	vector<int> a;
	a.push_back(12);
	a.push_back(21);
	a.push_back(1);
	a.push_back(80);
	a.push_back(23);

	shell_sort(a);
	
	int i = 0;
	for (i = 0; i < a.size(); i ++) {
		cout<<a[i]<<endl;
	}	

	return 0;
}

你可能感兴趣的:(Shell排序)