快速排序
#include <stdio.h>
int partition(int *a, int first, int last)
{
int temp = a[first];
while (last > first){
while (last > first && a[last] >= temp) last --;
if (last > first){
a[first] = a[last];
first ++;
}
while (last > first && a[first] <= temp) first ++;
if (last > first){
a[last] = a[first];
last --;
}
}
a[first] = temp;
return first;
}
void myqsort(int a[], int first, int last)
{
int part;
if (first < last){
part = partition(a, first, last);
myqsort(a, first, part);
myqsort(a, part+1, last);
}
}
void quicksort(int a[], int n)
{
int first = 0;
int last = n-1;
myqsort(a, first, last);
}
int main()
{
int a[] = {5, 2, 1, 9, 0, 8, 6, 4, 7, 3};
int n = sizeof(a)/sizeof(a[0]);
quicksort(a, n);
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
冒泡排序
#include <stdio.h>
void bubblesort(int a[], int n)
{
int i, j;
int temp;
int flag;
for (i = 1; i < n; i ++){
flag = 0;
for (j = n-1; j >= i; j --){
if (a[j] < a[j-1]){
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
flag = 1;
}
}
if (flag == 0) break;
}
}
int main()
{
int a[] = {3, 2, 9, 5, 1, 0, 6};
int n = sizeof(a)/sizeof(a[0]);
bubblesort(a, n);
int i;
for (i = 0; i < n; i ++){
printf("%d ", a[i]);
}
return 0;
}
插入排序
#include <stdio.h>
void insertsort(int a[], int n)
{
int i, j;
int temp;
for (i = 1; i < n; i ++){
for (j = i; j > 0; j --){
if (a[j] >= a[j-1]) break;
else
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}
int main()
{
int a[] = {3, 2, 8, 7, 0, 1, 6};
int n = sizeof(a)/sizeof(a[0]);
insertsort(a, n);
int i;
for (i = 0; i < n; ++i){
printf("%d ", a[i]);
}
return 0;
}
归并排序
#include <iostream>
using namespace std;
void Merge(int a[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int *L = new int[n1 + 1];
int *R = new int[n2 + 1];
int i, j, k;
for (i = 0; i < n1; i++)
L[i] = a[p + i];
for (j = 0; j < n2; j++)
R[j] = a[q + j + 1];
L[n1] = 0xFFFF, R[n2] = 0xFFFF;
i = 0; j = 0;
for (k = p; k <= r; k++){
if (L[i] <= R[j])
a[k] = L[i++];
else
a[k] = R[j++];
}
}
void Merge_sort(int a[], int p, int r)
{
if (p < r){
int q = (p + r) / 2;
Merge_sort(a, p, q);
Merge_sort(a, q + 1, r);
Merge(a, p, q, r);
}
}
int main()
{
int a[] = { 4, 2, 1, 8, 5, 3, 9, 2, 0 };
int n = sizeof(a) / sizeof(a[0]);
Merge_sort(a, 0, n - 1);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
堆排序
#include <iostream>
using namespace std;
#define LeftChild(i) (2*(i) + 1)
void Swap(int &a, int &b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
void PercDown(int a[], int i, int N)
{
int child;
int tmp;
for (tmp = a[i]; LeftChild(i) < N; i = child){
child = LeftChild(i);
if (child != N - 1 && a[child + 1] > a[child])
child++;
if (tmp < a[child])
a[i] = a[child];
else
break;
}
a[i] = tmp;
}
void HeapSort(int a[], int N)
{
int i;
for (i = N / 2; i >= 0; i--)
PercDown(a, i, N);
for (i = N - 1; i > 0; i--){
Swap(a[0], a[i]);
PercDown(a, 0, i);
}
}
int main()
{
int a[] = { 1, 4, 2, 9, 7, 0, 9, 5, 6, 3 };
int n = sizeof(a) / sizeof(a[0]);
HeapSort(a, n);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
二分查找
#include <stdio.h>
int mybsearch(int a[], int n, int target)
{
int first = 0, last = n-1, mid;
while (first <= last){
mid = (first+last)/2;
if (a[mid] == target) return mid;
else if (a[mid] < target) first = mid+1;
else last = mid-1;
}
return 0;
}
int main()
{
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(a)/sizeof(a[0]);
printf("%d ", mybsearch(a, n, 5));
return 0;
}