冒泡排序、快速排序、选择排序、插入排序、shell排序C代码
2008-12-25 16:19
661 查看
#include <stdio.h>
void bubbleSort(int *list,int index)
{
int i,j;
int temp;
for(j=index;j>0;j--)
{
for(i=0;i<j-1;i++)
{
if(list[i]>list[i+1])
{
temp=list[i+1];//较小值保存在暂存变量里
list[i+1] = list[i];// 较大值后移
list[i] = temp;//较小值前移
}
}
}
}
void quicksort(int *list,int left,int right)
{
int i,j,k;
int pivot;//分割指针
int temp;//交换时的暂存变量
i=left;j=right+1;
pivot=list[left];
if(i<j)
{
do
{
do
{
i++;
}while(list[i]<=pivot&&i<=right);//从左往右找大于pivot的值
do
{
j--;
}while(list[j]>=pivot&&j>left);//从右往左找小于pivot的值
if(i<j)
{
temp=list[i];
list[i] = list[j];
list[j] = temp;
}
}while(i<j);//1st do
temp = list[left];
list[left] = list[j];
list[j] = temp;
quicksort(list,left,j-1);
quicksort(list,j+1,right);
}
}
void selectionsort(int *list,int index)
{
int i,j,minat,min;
for(i=0;i<(index-1);i++)
{
minat=i;
min = list[i];
for(j=i+1;j<index;j++)//select the min of the rest of array
{
if(min>list[j])
{
minat = j;//position of the min element
min=list[j];
}
}
int temp=list[i];
list[i]=list[minat];
list[minat] = temp;
}
}
void insertionsort(int *list,int index)
{
int i,j;
int insertnode;
for(i=1;i<index;i++)
{
insertnode=list[i];//设置欲插入的数值
j=i-1;
while(j>=0&&insertnode<list[j])
{
list[j+1] = list[j];
j--;
}
list[j+1] = insertnode;
}
}
void shellsort(int *list,int index)
{
int i,j,d;
int temp;
d=index/2;//初始集合间隔长
while(d>0)
{
for(i=d;i<index;i++)
{
j=i-d;
while(j>=0)
{
if(list[j]>list[j+d])
{
temp=list[j];
list[j]= list[j+d];
list[j+d]= temp;
j=j-d;
}
else
j=-1;
}
}
d/=2;
}
}
int main()
{
int bsort[64];
int i,node,index=0;
printf("Please input number to sort:/n");
scanf("%d",&node);
while(node)
{
bsort[index++]=node;
scanf("%d",&node);
}
/*-------------Bubble Sort-------------------*/
//bubbleSort(bsort,index);
/*------------------------------------------*/
/*----------quick sort----------------------*/
//quicksort(bsort,0,index-1);
/*------------------------------------------*/
/*----------selection sort------------------*/
//selectionsort(bsort,index);
/*------------------------------------------*/
/*----------Insertion sort------------------*/
//insertionsort(bsort,index);
/*------------------------------------------*/
/*-----------Shell sort---------------------*/
shellsort(bsort,index);
/*------------------------------------------*/
printf("/nFinal sorting result:/n");
for(i=0;i<index;i++)
{
printf("%d ",bsort[i]);
}
return 0;
}
void bubbleSort(int *list,int index)
{
int i,j;
int temp;
for(j=index;j>0;j--)
{
for(i=0;i<j-1;i++)
{
if(list[i]>list[i+1])
{
temp=list[i+1];//较小值保存在暂存变量里
list[i+1] = list[i];// 较大值后移
list[i] = temp;//较小值前移
}
}
}
}
void quicksort(int *list,int left,int right)
{
int i,j,k;
int pivot;//分割指针
int temp;//交换时的暂存变量
i=left;j=right+1;
pivot=list[left];
if(i<j)
{
do
{
do
{
i++;
}while(list[i]<=pivot&&i<=right);//从左往右找大于pivot的值
do
{
j--;
}while(list[j]>=pivot&&j>left);//从右往左找小于pivot的值
if(i<j)
{
temp=list[i];
list[i] = list[j];
list[j] = temp;
}
}while(i<j);//1st do
temp = list[left];
list[left] = list[j];
list[j] = temp;
quicksort(list,left,j-1);
quicksort(list,j+1,right);
}
}
void selectionsort(int *list,int index)
{
int i,j,minat,min;
for(i=0;i<(index-1);i++)
{
minat=i;
min = list[i];
for(j=i+1;j<index;j++)//select the min of the rest of array
{
if(min>list[j])
{
minat = j;//position of the min element
min=list[j];
}
}
int temp=list[i];
list[i]=list[minat];
list[minat] = temp;
}
}
void insertionsort(int *list,int index)
{
int i,j;
int insertnode;
for(i=1;i<index;i++)
{
insertnode=list[i];//设置欲插入的数值
j=i-1;
while(j>=0&&insertnode<list[j])
{
list[j+1] = list[j];
j--;
}
list[j+1] = insertnode;
}
}
void shellsort(int *list,int index)
{
int i,j,d;
int temp;
d=index/2;//初始集合间隔长
while(d>0)
{
for(i=d;i<index;i++)
{
j=i-d;
while(j>=0)
{
if(list[j]>list[j+d])
{
temp=list[j];
list[j]= list[j+d];
list[j+d]= temp;
j=j-d;
}
else
j=-1;
}
}
d/=2;
}
}
int main()
{
int bsort[64];
int i,node,index=0;
printf("Please input number to sort:/n");
scanf("%d",&node);
while(node)
{
bsort[index++]=node;
scanf("%d",&node);
}
/*-------------Bubble Sort-------------------*/
//bubbleSort(bsort,index);
/*------------------------------------------*/
/*----------quick sort----------------------*/
//quicksort(bsort,0,index-1);
/*------------------------------------------*/
/*----------selection sort------------------*/
//selectionsort(bsort,index);
/*------------------------------------------*/
/*----------Insertion sort------------------*/
//insertionsort(bsort,index);
/*------------------------------------------*/
/*-----------Shell sort---------------------*/
shellsort(bsort,index);
/*------------------------------------------*/
printf("/nFinal sorting result:/n");
for(i=0;i<index;i++)
{
printf("%d ",bsort[i]);
}
return 0;
}
相关文章推荐
- [java]排序分类--及选择排序、插入排序、冒泡排序、快速排序的解释图和代码
- [java]排序分类--及选择排序、插入排序、冒泡排序、快速排序的解释图和代码
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- Java程序员从笨鸟到菜鸟(二)Java实现冒泡排序、快速排序、插入排序、选择排序等基本排序方式
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- Java实现冒泡排序、快速排序、选择排序、插入排序和归并排序
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- Java常见排序:冒泡排序、快速排序、选择排序、插入排序、归并排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- (一)Java实现排序,选择排序,快速排序,冒泡排序,插入排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 冒泡排序、选择排序、快速排序、插入排序(希尔排序)、堆排序(十大排序)
- C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- javascript的冒泡排序, 快速排序, 选择排序, 插入排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序