排序算法--选择+冒泡及其改进
2015-04-07 21:27
197 查看
void Bubble(int a[],int n)
{
int i,j;
for (i=0;i<=n-2;i++){
for (j=0;j<=n-2-i;j++){
if (a[j+1]<a[j]){
swap(a[j+1],a[j]);
}
}
}
for (i=0;i<=n-1;i++){
printf("%3d",a[i]);
}
printf("\n");
}
上面的程序还不如这个版本:
#include "stdio.h" #include "stdlib.h" void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void SelectSort(int a[],int n) { int i,j,min; for (i=0;i<n;i++){ min=i; for (j=i+1;j<=n-1;j++){ if (a[min]>a[j]) min=j; } if (min!=i) swap(&a[min],&a[i]); } } void BubbleSort1(int a[],int n) { //两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 int i,j; for (i=0;i<n;i++){ for (j=i+1;j<=n-1;j++){ if (a[i]>a[j]) swap(&a[i],&a[j]); } } } void BubbleSort2(int a[],int n) { //冒泡算法的进一步优化,使用一个标志位来记录是 //否有数据的交换,如果数据有交换,则将标志flag赋值为true int i,j; for (i=0;i<n;i++){ for (j=n-2;j>=i;j--){ if (a[j]>a[j+1]) swap(&a[j],&a[j+1]); } } } void BubbleSort3(int a[],int n) { int i,j; int flag=1; for (i=0;i<n&&flag;i++){ flag=0; for (j=n-2;j>=i;j--){ if (a[j]>a[j+1]){ swap(&a[j],&a[j+1]); flag=1; } } } } void Print(int a[],int n) { int i; for (i=0;i<=n-1;i++){ printf("%d ",a[i]); } printf("\n\n\n"); } int main() { int a[10]={1,8,5,7,9,2,3,6,4,11}; BubbleSort3(a,10); Print(a,10); return 0; }
上面的程序还不如这个版本:
void Bubble(int a[],int n) { int i,j; for (i=0;i<=n-2;i++){ for (j=0;j<=n-2-i;j++){ if (a[j+1]<a[j]){ swap(a[j+1],a[j]); } } } for (i=0;i<=n-1;i++){ printf("%3d",a[i]); } printf("\n"); }
相关文章推荐
- 冒泡、插入、选择排序及其改进
- 三种初级排序算法(冒泡、选择、直接插入)java实现及其性能比较
- 冒泡、插入、选择排序及其改进
- 冒泡、插入、选择排序及其改进
- 冒泡、插入、选择排序及其改进
- 排序算法的比较、选择及其改进
- JAVA排序算法:插入、选择、冒泡
- 易解排序算法 - 上 (java写:冒泡-插入-选择-希尔-归并、五种排序算法)
- 常见排序算法(冒泡,选择,快速)的C语言实现【修正版】
- 排序算法:简单选择,冒泡和直接插入
- Java之美[从菜鸟到高手演变]之常见的几种排序算法-插入、选择、冒泡、快排、堆排等 .
- 七大排序算法(冒泡,选择,插入,二分法排序,希尔,快速,合并,堆排序)的java实现
- 常见排序算法(冒泡,选择,快速)的C语言实现
- 初级排序算法之冒泡、选择、插入、希尔排序(附Java实现和分析)
- 几种简单的排序算法一(冒泡、选择、插入、快速)python描述
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 基本排序算法(选择、插入、冒泡)和希尔排序
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- Java之美[从菜鸟到高手演变]之常见的几种排序算法-插入、选择、冒泡、快排、堆排等 .
- 排序(一)冒泡排序、冒泡改进——鸡尾酒排序、选择排序