您的位置:首页 > 编程语言 > C语言/C++

【小镇的技术天梯】C语言,冒泡、快速、希尔、选择排序

2016-03-22 14:59 471 查看
【数组的排序同样是基础中的基础,相信你们用习惯了list.sort()之类的类库自带函数连一些最基本的算法基础都不会了,下面小镇带来最基本的四个排序。】

冒泡、选择排序是最为基础的排序。冒泡是每次比较相邻的项,然后一次一次将最小的数从某个位置冒泡到第一个。选择排序是找到相应位置的项放到相应的位置上去。

希尔排序是为了使比较差的情况的选择排序优化顺序。

快速排序有着二分法的思想,在数据量大的情况下时间会少一个数量级。时间复杂度是O(nlogn).

代码如下,基础而已很简单:

/* 冒泡排序、插入排序、希尔排序 */

/*
* author:镇天宇
*/

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

//冒泡排序
void bubble_sort(int data[],int length)
{
int j=0,i=0,temp=0;
int flag=1;

if(data==NULL||length==0)
return;

for(i=length-1;i>=1&&flag;i--){
flag=0;
for(j=0;j<i;j++){
if(data[j]>data[j+1]){
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
if(flag==0)
flag=1;
}
}
}
}

//插入排序
void insert_sort(int data[],int length)
{
int j,i,temp=0;
if(data==NULL||length==0)
return;

for(i=1;i<length;i++){
for(j=i;j>=1;j--){
if(data[j]<data[j-1]){
temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
}else{
break;
}
}
}
}

//希尔排序
void shell_sort(int array[], int length, int step)
{
int j = 0;
int i = 0;
int median = 0;

if(NULL == array || 0 == length)
return;

for(; step >= 1; step -=2){
for(int index = 0; index < step; index ++){
if((length -1) < (index + step))
continue;
else{
i = index + step;
while( (i + step) <= (length - 1))
i += step;
}

for(;  i >= (index + step);  i -= step){
for(j = index; j <= i - step; j += step){
if(array[j] >= array[j + step]){
median = array[j];
array[j] = array[j + step];
array[j + step] = median;
}
}
}
}
}
}

//快速排序
void quick_sort( int data[], int left, int right )
{
int i, j, temp;
if ( left < right )
{
i = left; j = right; temp = data[i];
while ( i < j )
{
while ( i<j &&data[j]>temp )
j--;
if ( i < j )
data[i++] = data[j];
while ( i < j && data[i] < temp )
i++;
if ( i < j )
data[j--] = data[i];
}
data[i] = temp;
quick_sort(data,left,i-1);
quick_sort(data,i+1,right);
}
}

int main()
{
int array[20]={5,3,9,32,76,5,3,9,7,6};

shell_sort(array,10,5);

int i;
for(i=0;i<10;i++)
{
printf("%d ", array[i]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: