c语言冒泡、选择、插入、希尔、快速、归并排序
#include<iostream>
using namespace std;
int getlength(int a[]);
void insertion(int a[]);
int a[] = { 3,42,54,2312,312345,235423,5346,6356,6353,346,34,346,534,354,1 };
void insertion(int a[]) {
int i, j;
int key;
for (j = 1; j < getlength(a); j++) {
key = a[j];
for (i = j - 1;i >= 0 && a[i] > key; i--) {
a[i + 1] = a[i];
}
a[i+1] = key;
}
}
int getlength(int a[]) {
int L = 0;
int i = 0;
while (a[i]) {
L++;
i++;
}
return L;
}
void bubble(int* a) {
for (int i = 0; i < getlength(a); ++i) {
for (int j = 0; j < getlength(a) - 1 - i; ++j) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
void seclection(int a[]) {
int i, j, key;
for (i = 0; i < getlength(a); ++i) {
key = i;
for (j = i; j < getlength(a); ++j) {
if (a[j] < a[key]) {
key = j;
}
}
int temp;
temp = a[key];
a[key] = a[i];
a[i] = temp;
}
}
void hell(int* a){
int step = getlength(a) / 2;
int i; int j;
for (step; step > 0; step = step/2) {
for (i = step; i<getlength(a); i++) {
int temp = a[i];
for (j = i - step; j >= 0 && a[j]>temp; j = j - step) {
a[j + step] = a[j];
}
a[j+step] = temp;
}
}
}
void quick(int a[], int low, int high) {
if (low >= high) {
return;
}
int l = low, h = high, x = a[low];
while (l < h) {
if (a[h] < x) {
a[l] = a[h];
a[h] = x;
l++;
if (a[l] > x) {
a[h] = a[l];
a[l] = x;
h--;
}
else {
l++;
}
}
else {
h--;
}
}
a[l] = x;
quick(a, low, l - 1);
quick(a, l + 1, high);
}
void merge(int* a, int* b,int start, int end) {
if (start >= end) {
return;
}
int s = start, e = end, m = (start+end)/2;
int s1 = s, s2 = m+1, e1 = m, e2 = e;
merge(a, b, s1, e1);
merge(a, b, s2, e2);
int i = start;
while (s1<=e1&&s2<=e2)
{
if (a[s1] > a[s2]) {
b[i++] = a[s2];
s2++;
}
else {
b[i++] = a[s1];
s1++;
}
}
while (s2 <= e2) {
b[i++] = a[s2++];
}
while (s1 <= e1) {
b[i++] = a[s1++];
}
for (i = start; i <= end; i++) {
a[i] = b[i];
}
}
int main() {
cout << getlength(a) << endl;
cout << "====================" << endl;
//insertion(a);
//bubble(a);
//seclection(a);
//hell(a);
//quick(a,0,getlength(a)-1);
int* b = (int*)malloc(20 * sizeof(int));
//merge(a, b, 0, getlength(a) - 1);
free(b);
for (int i = 0; i < getlength(a); ++i) {
cout << a[i]<<"->";
}
cout << endl;
/*int q = 10;
q=q>>1;
cout <<"q:"<< q<<endl;*/
return 0;
}