zoukankan      html  css  js  c++  java
  • 所有的排序算法

    /**************插入排序****************/

    #include <stdio.h>

    int str[]={3,1,34,5,3,7,9};
    void insertSort(int str[],int length);
    int length(int str[]);
    void printArray(int str[],int length);
    int main(){
    insertSort(str,7);
    printArray(str,7);
    return 0;
    }

    void printArray(int str[],int length){
    for(int i=0;i<length;i++){
    printf("%d\t",str[i]);
    }
    printf("\n");
    }

    void insertSort(int a[],int length){
    int i,j,temp;
    for(i=1;i<length;i++)
    {
    if(a[i]<a[i-1]){
    temp=a[i];
    a[i]=a[i-1];

    for(j=i-2;j>=0 && a[j]>temp;j--){
    a[j+1]=a[j];
    }
    a[j+1]=temp;
    }
    }
    }

    /******************shell排序************************/

    #include <stdio.h>

    int str[]={3,1,34,5,3,7,9};
    void shellSort(int str[],int length,int gap);
    //int length(int str[]);
    void printArray(int str[],int length);
    int main(){
    shellSort(str,7,5);
    printArray(str,7);
    return 0;
    }

    void printArray(int str[],int length){
    for(int i=0;i<length;i++){
    printf("%d\t",str[i]);
    }
    printf("\n");
    }

    void shellSort(int a[],int length,int gap){
    int i,j,temp;
    for(gap;gap>0;gap=gap/2)
    for(i=gap;i<=length-gap;i++)
    {
    if(a[i]<a[i-gap]){
    temp=a[i];
    a[i]=a[i-gap];

    for(j=i-gap;j>=0 && a[j]>temp;j=j-gap){
    a[j+gap]=a[j];
    }
    a[j+gap]=temp;
    }
    }
    }

    /***************************快速排序算法***************************/

    #include <stdio.h>
    #include <string.h>

    void Qsort(int a[],int left,int right);
    int partition(int a[],int left,int right);
    void swap(int a[],int left,int right);
    void printA(int a[]);
    int main(){
    int a[]={
    10,9,8,7,6,5,4,3,2,1,};
    Qsort(a,0,9);
    printA(a);
    }

    void Qsort(int a[],int left,int right){
    if(left<=right) //一定是left<=right,这个要清楚啊。还是快速排序不熟的缘故啊
    {
    int sign=partition(a,left,right);
    Qsort(a,left,sign-1);
    Qsort(a,sign+1,right);
    }
    }

    int partition(int a[],int left,int right)
    {
    int temp=a[left];
    while(left<right){
    while(left<right && temp<=a[right]) {
    right--;
    }
    a[left]=a[right];
    while(left<right && temp>=a[left]){
    left++;
    }
    a[right]=a[left];
    }
    a[left]=temp;
    return left;
    }
    void swap(int a[],int left,int right){
    int temp;
    temp=a[right];
    a[right]=a[left];
    a[left]=temp;
    }
    void printA(int a[]){
    for(int i=0;i<10;i++)
    {
    printf("%d\t",a[i]);
    }
    }

  • 相关阅读:
    hdu 3496
    poj 2374
    zoj 3399
    poj 1321
    sgu 365
    hdu 3555
    poj 3345
    poj 2355
    Android重命名文件
    在workflow中传值的sample
  • 原文地址:https://www.cnblogs.com/mingChou/p/sort.html
Copyright © 2011-2022 走看看