开发者社区> 问答> 正文

对一组数据进行直接插入排序、冒泡排序、简单选择排序和快速排序。(升序)c++求完整代码

帮忙吧,急需

展开
收起
知与谁同 2018-07-16 11:03:10 2363 0
2 条回答
写回答
取消 提交回答
  • 杀人者,打虎武松也。
    //
    // 都是维基百科复制来的,想要详细信息自己可以去搜索一下,那里的代码很经典的,比“谭”的好多了
    //

    插入排序
    void insertion_sort(char array[], unsigned int first, unsigned int last)
    {
    int i,j;
    int temp;
    for (i = first+1; i<=last;i++)
    {
    temp = array[i];
    j=i-1;

    //与已排序的数逐一比较,大于temp时,该数移后
    while((j>=first) && (array[j] > temp))
    {
    array[j+1] = array[j];
    j--;
    }
    array[j+1] = temp; //被排序数放到正确的位置
    }
    }

    使用标志的冒泡排序

    void bubble_sort(int a[], const int size)
    {
    bool flag = true;
    int temp = 0; /* Temporary value for swapping two elements */

    for (int i = 0; i < size - 1; i ++)
    {
    flag = true;
    for (int j = 0; j < size - i - 1; j ++)
    {
    if (a[j] > a[j + 1])
    {
    temp = a[j];
    a[j] = a[j + 1];
    a[j + 1] = temp;
    flag = false;
    } // end if
    } // end for j = ...

    if (flag == true)
    break;

    } // end for i = ...
    }

    简单选择排序
    // selection sort function module in C
    void selectionSort(int data[], int count)
    {
    int i, j, min, temp;
    for (i = 0; i < count - 1; i++) {
    /* find the minimum */
    min = i;
    for (j = i+1; j < count; j++)
    if (data[j] < data[min])
    min = j;
    /* swap data[i] and data[min] */
    temp = data[i];
    data[i] = data[min];
    data[min] = temp;
    }
    }

    快速排序

    void swap(int *a, int *b)
    {
    int t=*a; *a=*b; *b=t;
    }

    void quicksort(int arr[],int beg,int end)
    {
    if (end >= beg + 1)
    {
    int piv = arr[beg], k = beg + 1, r = end;

    while (k < r)
    {
    if (arr[k] < piv)
    k++;
    else
    swap(&arr[k], &arr[r--]);
    }
    if (arr[k] < piv){
    r++;
    swap(&arr[k],&arr[beg]);

    quicksort(arr, beg, k);
    quicksort(arr, r, end);
    }else {
    if (end - beg == 1)
    return;

    swap(&arr[--k],&arr[beg]);
    quicksort(arr, beg, k);
    quicksort(arr, r, end);
    }
    }

    }
    2019-07-17 22:50:50
    赞同 展开评论 打赏
  • 这个时候,玄酱是不是应该说点什么...
    我给你所有的算法,你自己去组合一下就好了。。
    1.直接插入排序:
    算法:void InsSort(RecordType r[], int length)
    /* 对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
    {
    int i,j;
    for (i=2; i<=length; i++)
    {
    r[0]=r[i]; /*将待插入记录存放到监视哨r[0]中*/
    j=i-1;
    while (r[0].key< r[j].key ) /* 寻找插入位置 */
    {
    r[j+1]= r[j];
    j=j-1;
    }
    r[j+1]=r[0]; /*将待插入记录插入到已排序的序列中*/
    }
    } /* InsSort */
    2.冒泡排序:
    算法:void BubbleSort(RecordType r[], int length )
    /*对记录数组r做冒泡排序,length为数组的长度*/
    {
    int n,i,j;
    int change;
    RecordType x;
    n=length;
    change=TRUE;
    for ( i=1 ; i<= n-1 && change ;++i )
    {
    change=FALSE;
    for ( j=1 ; j<= n-i ; ++j)
    if (r[j].key > r[j+1].key )
    {
    x= r[j];
    r[j]= r[j+1];
    r[j+1]= x;
    change=TRUE;
    }
    }
    } /* BubbleSort */
    3.快速排序:
    算法:void QKSort(RecordType r[],int low, int high )
    /*对记录数组r[low..high]用快速排序算法进行排序*/
    {
    int pos;
    if(low<high)
    {
    pos=QKPass(r, low, high); /*调用一趟快速排序,将枢轴元素为界划分两个子表*/
    QKSort(r, low, pos-1); /*对左部子表快速排序*/
    QKSort(r, pos+1, high); /*对右部子表快速排序*/

    }
    }
    4.简单选择排序:
    算法:void SelectSort(RecordType r[], int length)
    /*对记录数组r做简单选择排序,length为数组的长度*/
    {
    int i,j,k;
    int n;
    RecordType x;
    n=length;
    for ( i=1 ; i<= n-1; ++i)
    {
    k=i;
    for ( j=i+1 ; j<= n ; ++j)
    if (r[j].key < r[k].key )
    k=j;
    if ( k!=i)
    {
    x= r[i];
    r[i]= r[k];
    r[k]=x;
    }
    }

    } /* SelectSort */
    这是你需要的四种排序的核心算法程序,你自己组合写个主函数调用即可,注意排序函数的排序顺序,自己根据需要改吧。。。。。
    2019-07-17 22:50:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载