希尔排序(引用http://t.csdnimg.cn/zVqeu)
第一种
void shellsort2(int a[], int n)
{
int j, gap;
for (gap = n / 2; gap > 0; gap /= 2)
for (j = gap; j < n; j++)//从数组第gap个元素开始
if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序
{
int temp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > temp)
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp;
}
}
第二种
void shellsort3(int a[], int n)
{
int i, j, gap;
for (gap = n / 2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)
Swap(a[j], a[j + gap]);
}
冒泡法(引用http://t.csdnimg.cn/yBflq)
#include<stdio.h>
void Print(int array[],int len){
for(int i=0;i<len;i++){
printf("%d ",array[i]);
}
}
void BubbleSort(int array[],int len){
int tem;
//外层循环控制 排序的趟数 n个元素排序需要循环n-1次 【1】
for(int i=0;i<len-1;i++) {
//内层循环控制比较的次数 n个元素第i趟比较n-i次 【2】
for(int j=0;j<len-1-i;j++) {
//比较相邻的元素大小 目的:将最大的元素选出到移动到最后
if(array[j]>array[j+1]){
tem = array[j];
array[j] = array[j+1];
array[j+1] = tem;
}
}
}
printf("\n\n排序完成!\n");
}
int main(){
int array[] = {3,44,38,5,47,15,36};
int len = sizeof(array) / sizeof(int);
printf("原始序列为:\n");
Print(array,len);
BubbleSort(array,len);
printf("\n排序后序列为:\n");
Print(array,len);
}
直接插入排序(引用http://t.csdnimg.cn/e5Mgq)
将整个排序过程看作n-1趟插入,先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序。
public void insert_Sort(int a[], int n)
{
int i, j;
for(i= 1; i<= n-1; i++)
{
if(a[i]< a[i- 1])
{
int t= a[i]; //a[i]为要插入的元素
for(j= i- 1; j>= 0 && a[j]> t; j--)
{
a[j+ 1]= a[j]; //当要插入的元素小于序列中的元素时,序列中的元素都要向后移动一位
}
a[j+ 1]= t;
}
}
}