最近研究一些算法,主要是C和java版本的算法,以供以后备用。
1,冒泡排序
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上
而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较
小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要
求相反时,就将它们互换。
java 代码:
public class BulueTest {
public BulueTest() {
}
public void sort(int[] a, int len )
{
for(int i=len-1;i>=0;i--)
{
for(int j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
int tmp = a[j];
a[j] = a[j+1] ;
a[j+1] =tmp ;
}
}
}
print(a) ;
}
public void sort1(int a[], int len)
{
for(int i=0;i<a.length;i++)
{
for(int j=a.length-1;j>i;j--)
{
if(a[j-1]>a[j])
{
int tmp = a[j];
a[j] = a[j-1] ;
a[j-1] =tmp ;
}
}
}
print(a) ;
}
public void print(int a[])
{
System.out.println("----------buble----");
for(int i=0;i<a.length;i++)
{
System.out.print(" "+a[i]+"\t");
}
}
public static void main(String[] args) {
BulueTest buluetest = new BulueTest();
int[] x = new int[]{33,4,22,5,6,9,8,7,6,2,1};
buluetest.sort1(x,x.length);
}
}
C代码:
#include <stdio.h>
void print_f(int* a , int len) ;
void bublesort(int* a, int len) ;
int main(int argv,char* args[])
{
int a[] = {22,33,1,2,3,44,2,33,45,13,12};
bublesort(a,sizeof(a) / sizeof(a[0])) ;
}
void bublesort(int* a, int len)
{
int i , j ;
for(i = len-1;i>0;i--)
{
for(j = 0;j<i;j++)
{
if(a[j]>a[j+1])
{
int tmp = a[j] ;
a[j] = a[j+1] ;
a[j+1] =tmp ;
}
}
}
print_f(a,len) ;
}
void print_f(int* a , int len)
{
int i ;
for(i = 0;i<len ;i++)
{
printf(" %d \t" , *(a+i));
}
}
2,直接插入排序
算法思想简单描述:
在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排
好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
也是排好顺序的。如此反复循环,直到全部排好顺序。
java 代码:
public class InsertSort
{
public void sort(int a[] , int len)
{
int key ;
int j ;
for(int i=1;i<len;i++)
{
key = a[i];
for( j=i-1;j>=0 ;j--)
{
if(a[j] >key)
a[j+1] =a[j] ;
else
break; // 这里不能用另一个变量来记录j 的下标,当j变到 -1 时,就取不到值
}
a[j+1] =key ;
}
print(a) ;
}
public void print( int a[])
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+"\t");
}
}
public static void main(String args[])
{
InsertSort is = new InsertSort();
int a[] =new int[]{3,4,7878,67,5,1,2,33,12,31};
is.sort(a, a.length) ;
}
public static void insertSort(int[] a){
int j;
for(int p = 1; p < a.length; p++){
int temp = a[p];
for(j = p-1; (j >= 0) && (temp < a[j]); j--)
{
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
// public static void main(String[] args){
// int[] b = {9,8,5,2,1,7,3,4,8888,43,23525,232,12,34,53,75,13,15,17};
// insertSort(b);
// for(int i = 0; i < b.length; i++)
// System.out.print(b[i] + " , ");
// }
}
C代码:
InsertSort.h :
#ifndef INSERTSORT_H_
#define INSERTSORT_H_
void printf1(int a[]) ;
void insertSort(int a[] , int len) ;
int getLength(int a[]) ;
#endif /* INSERTSORT_H_ */
InsertSort.C :
/*
* InsertSort.c
*
* Created on: 2010-11-1
* Author: Administrator
*/
#include <stdio.h>
#include "InsertSort.h"
nt main(int argv,char* args[])
{
printf("this is Insert Sort...\n") ;
int a[] = {33,22,11,234,45,643,2,3,4,56,32,1};
printf("a.length ===== %d, \n " , getLength(a)) ;
int len = sizeof(a) /sizeof(a[0]) ; // 48 / 4 == 12 ;
insertSort(a, len) ;
return 0 ;
}
int getLength(int* a) // 只是传了一个地址的长度,后面暂没传过来
{ ///// 数组作为函数参数,作用类似指针。 函数只传递一个4字节的地址
/// ,而没有其大小信息。
int len = 0 ;
//printf(sizeof(a)) ;
///printf( sizeof(a[0]) ) ;
int s =sizeof(a) ; /// == 1
int l = sizeof(*a) ; //// == 1 ;
len = s / l ;
return len ;
}
void insertSort(int a[] , int len)
{
int key ;
int j ;
int i ;
for(i = 1;i<len;i++)
{
key = a[i] ;
for(j = i-1;j>=0;j--)
{
if(key <a[j])
a[j+1]=a[j] ;
else
break ;
}
a[j+1] = key ;
}
printf1(a) ;
}
void printf1(int* a)
{
int i ;
for(i = 0 ;i<12;i++)
{
printf("%d \t" ,a[i]) ;
}
}
分享到:
相关推荐
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
1. **直接插入排序**:直接插入排序是最基础的排序算法之一。它的工作原理是将待排序的元素逐个与已排序的部分进行比较,找到合适的位置插入。这种算法对于小规模或部分有序的数据集表现较好,但对于大规模无序数据...
实验步骤中,我们首先定义了一个结构体数组来存储要排序的数据,然后编写了三个独立的排序函数:直接插入排序函数、冒泡排序函数和快速排序函数。每个函数都输出了排序后的数据排列序列情况。 实验结果的分析表明,...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
本篇文章将深入探讨五种基本的排序算法:直接插入排序、快速排序、堆排序、冒泡排序以及希尔排序。 1. **直接插入排序**: 直接插入排序是一种简单的排序算法,它的基本思想是将未排序的元素逐个插入到已排序的...
本篇文章将深入探讨标题和描述中提到的九大排序算法:快速排序、冒泡排序、堆排序、希尔排序、直接插入排序、直接选择排序、基数排序、箱排序和桶排序。 1. **快速排序**:快速排序是一种基于分治策略的排序算法,...
### 数据结构:交换排序-冒泡排序实验指导 #### 实验背景与目标 在计算机科学领域,数据结构和算法是核心研究对象,其中排序算法作为基础且重要的算法之一,广泛应用于各类数据处理场景。本实验旨在深入理解并掌握...
插入排序是最简单的排序算法之一,它的工作原理类似于手动整理扑克牌。遍历数组,将每个元素插入到已排序的部分,保持已排序部分的顺序。对于小规模或部分有序的数据,插入排序效率较高。其平均和最坏情况下的时间...
数据结构---直接插入排序/快速排序/选择排序/冒泡排序(详细实现算法和性能比较)
2. 冒泡排序:是最简单的排序算法之一,通过不断交换相邻位置的元素来逐渐达到排序的目的。每一轮遍历都能确保最大(或最小)的元素被放置到正确的位置,重复这个过程直到整个数组排序完成。 3. 选择排序:每次从未...
- 学习并掌握多种排序算法(包括直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序等),同时理解它们的性能特点。 #### 实验环境配置 - **硬件需求**:一台装有Windows操作系统的计算机。 - **...
数据结构课程设计是计算机科学教育中的重要组成部分,它涉及到如何高效地组织和处理数据,而排序算法则是数据结构中的一项基础但至关重要的内容。在这个课程设计中,我们重点关注了六种经典的内部排序算法:直接插入...
这七种算法分别是:冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序和快速排序。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过重复遍历待排序序列,比较相邻元素并交换位置来实现排序...
- 插入排序是一种简单直观的排序算法,它的工作原理类似于打扑克牌。将数组分为已排序区和未排序区,每次从未排序区取出一个元素,插入到已排序区的正确位置。 - C# 实现时,通常使用两个指针,一个指向已排序区的...
直接插入排序是一种简单的排序算法,它通过比较当前元素与前面已排序的元素,将元素逐步插入到正确的位置。在每一轮中,它将一个未排序的元素插入到已排序序列的适当位置,直到所有元素都被排序。该算法对于小规模或...
冒泡排序的时间复杂度为O(n^2),是最简单的排序算法之一,但效率较低。 在实现这些排序算法时,程序会从文件中读取随机生成的数值,这是因为真实世界的数据往往存储在文件中。通过用户友好的菜单界面,用户可以选择...
根据给定文件的信息,本文将深入探讨C语言中的两种经典排序方法:插入排序法与冒泡排序法。这两种方法在实际编程中应用广泛,对于理解数据结构与算法的基础概念至关重要。 ### 一、冒泡排序法 #### 1.1 基本原理 ...
直接插入排序、冒泡排序和简单选择排序是三种常用的排序算法,它们分别应用于不同的场景中。在本实验报告中,我们将详细介绍这三种排序算法的实现过程。 一、直接插入排序 直接插入排序是一种简单的排序算法,它的...