首页 > 编程语言 > 详细

C语言一维数组排序

时间:2021-05-17 15:36:10      阅读:8      评论:0      收藏:0      [点我收藏+]

交换排序

1.冒泡排序

算法思想

  1.将所有元素放入数组中;

  2.从第一个元素开始,依次将相邻的两个元素比较,若前者大于后者则交换;

  3.重复第2步,直到没有交换为止。

程序实现

void sort(int *a, int n)
{
    int i, j, t, ok;
    for(i=0; i<n-1; i++){
        ok=1;
        for(j=0; j<n-1-i; j++)
            if(a[j]>a[j+1]){
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
                ok=0;
            }
        if(ok)
            break;
    }
}
void sort(int a[], int n)
{
    int i, t, ok;
    if(n==1)
        reurn;
    else{
        for(i=0;i<n-1;i++)
            if(a[i]>a[i+1]){
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
                ok=0;
            }
        if(ok)
            return;
        else
            sort(a,n-1);
    }
}

2.交换排序的另一种方法

void sort(int temp_array[ ],int n)
{    
    int i,j,t;
    for(i=0;i<n-1;i++) 
        for(j=i+1;j<n;j++) 
            if(temp_array[i]> temp_array[j]){ 
                t=temp_array[i];
                temp_array[i]=temp_array[j];
                temp_array[j]=t; 
                }
}

选择排序

算法思想

  记住每趟比较中最小的数据下标,最后将最小元素与起始元素交换,这样每趟只交换一次。

程序实现

void sort(int temp_array[ ],int n)
{    
    int i,j,point,t;
    for(i=0;i<n-1;i++){
         point=i;
         for(j=i+1;j<n;j++)            
               if(temp_array[point]> temp_array[j])
          point=j; if(point!=i){ t=temp_array[point]; temp_array[point]=temp_array[i]; temp_array [i]=t; } } }

插入排序

算法思想

  1.新建一个空列表,用于保存有序数列;

  2.从原数列取出一个数插入有序列表中,使其仍保持有序状态;

  3.重复第2步,直至原数列为空。

程序实现

void sort(int a[],int n)
{     
    int i,j,t;
    for(i=1;i<n;i++){
        t=a[i];              //第i+1个数
        for(j=i-1;a[j]>t&&j>=0;j--)  //第j个数小于t或所有数都大于t
           a[j+1]=a[j];         //大于t的数向后挪动
        a[j+1]=t;             //将t插入第j+1位置
    }
}

查找算法

线性查找法:时间复杂度O(n)级

for(i=0;i<ARRAY_NUM;i++)  
    if(x[i]==key) { 
         m=i;
         break;
    }
    if(m!=-1)  
    printf(“found! %d”,m); else
    printf(“not found!”);

折半查找法:时间复杂度O(log2n)级

技术分享图片

 

 

while(low<=high){
     mid=(low+high)/2;
     if(a[mid]==key){ 
        k=mid;
        break;
     }
    if(key<a[mid]) 
     high=mid-1;
     else
     low=mid+1;
}
int search(int x[ ],int low,int high,int key)
{     
    int mid;
    mid=(low+high)/2;
    if(x[mid]==key)
return mid; if(low>=high)
return1; else if(key<x[mid]) return search(x,low,mid-1,key); else return search(x,mid+1,high,key); }

C语言一维数组排序

原文:https://www.cnblogs.com/yuukirito/p/14776405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!