1 shell排序
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_LENGTH 9
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for (gap = (n / 3); gap > 0; gap = gap /(n / 3)) //确定数组分组
for (i = gap; i < n; i++)//分组后排序的次数
for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap)//对分组后的数据依次排序 排序结果为由小到大
{
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
int main(void) {
int arr[ARRAY_LENGTH] = { 12, 2, 20, 19, 28, 30, 12, 42, 35 };
printf("Original array:\n");
arrayPrintf(arr, ARRAY_LENGTH);
shellsort(arr, ARRAY_LENGTH);
putchar('\n');
printf("shellsort array:\n");
arrayPrintf(arr, ARRAY_LENGTH);
return EXIT_SUCCESS;
}
#include <stdio.h>
int r[6]={9,4,6,1,3,7};
int main(){
int i,j;
for(i=2;i<6;i++)
{
if(r[i]<r[i-1])
{
r[0]=r[i];
j=i-1;
do{
r[j+1]=r[j];
j--;
}while(r[0]<r[j]);
r[j+1]=r[0];
}
}
for(i=1;i<6;i++)
printf("r[%d]=%d ",i,r[i]);
return 0;
}
3、冒泡排序
#include <stdio.h>
int arr[9] = { 12, 2, 20, 19, 28, 30, 32, 42, 35 };
int main()
{
int i, j, temp;
for(i = 8 ; i > 0; i--)
for(j = 0 ; j<i+1; j++)
if(arr[j]< arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]= temp;
}
for(i=0;i<9;i++)
printf("%2d ",arr[i]);
printf("\n ");
return 0;
}
4、直接选择排序
#include <stdio.h>
int arr[10]= {12, 23, 4, 56, 8, 99, 24, 34, 47, 6};
int main()
{
int i, j ,temp, small;
for(i = 0; i < 9;i++)
{
small = i;
for(j = i+1; j<10; j++)
{
if(arr[j] < arr[small])
{
temp = arr[j];
arr[j] = arr[small];
arr[small] = temp;
}
}
}
for(i = 0; i < 10;i++)
printf("%2d ",arr[i]);
printf("\n");
return 0;
}
5归并排序
http://blog.csdn.net/caryaliu/article/details/7475700