#include <stdlib.h>
#include <stdio.h>
/* 冒泡排序 */
int BubbleSort(int a[],int n)
{
int i,j,temp,exchanged=0,cycles=0;
for(i=0; i<n; i++)
{
exchanged = 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;
exchanged = 1;
}
cycles++;
}
if(0 == exchanged)break;
}
return cycles;
}
/* 选择排序 */
void SelectSort(int array[], int n)
{
int i,j,t;
for (i=0;i<n-1;i++)
{
int pos = i;
for (j=i+1;j<n;j++)
{
if (array[j]<array[pos])
{
pos = j;//只是找到位置,并不需要每次都换一下
}
}
//找到位置后才交换,不是交换相邻元素,而是把最小的元素放在s[j]中
t = array[i];
array[i] = array[pos];
array[pos] = t;
}
}
/* 希尔排序 */
void ShellInsert(int a[], int n, int d)
{
int i,temp,j,cycles=0;
for(i=d; i<n; i++)
{
if(a[i] < a[i-d])//需要移动
{
temp = a[i];
for(j=i-d; j>=0 && a[j]>temp; j-=d)
a[j+d] = a[j];//后移
a[j+d] = temp;
}
}
}
void ShellSort(int a[], int n, int dist[],int k)
{
int i;
for(i=0; i<k; i++)//间距
ShellInsert(a,n,dist[i]);
}
int main(int argc, char *argv[])
{
int a[] = {4,5,3,2,9,8,1,7,6,0};
int b[] = {0,1,2,3,4,5,6,7,8,9};
int c[] = {9,8,7,6,5,4,3,2,1,0};
int dist[] = {5,3,2,1};
int i;
ShellSort(c,10,dist,4);
//printf("%d cycles\n",i);
for(i=0; i<10; i++)printf("%d\t",c[i]);
printf("\n");
return 1;
}
冒泡排序,选择排序,希尔排序
最新推荐文章于 2024-06-01 18:20:50 发布