zoukankan      html  css  js  c++  java
  • 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)

    代码
    
    // Ch08sort.cpp : Defines the entry point for the console application.
    //默认是从小到大排序
    
    #include <time.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    #define SIZE 10
    #define MAX 10000
    
    //直接插入排序080201
    //原理:每次将待排序的记录,按其关键字大小插入到前边已经排好序的子文件中的适当位置
    int InsertSort(int arr[],int len){
    int temp,j;
    for(int i=1;i<len;i++){
    if(arr[i]<arr[i-1]){
    temp=arr[i];
    j=i;
    do{
    arr[j]=arr[j-1];
    j--;
    }while(j>0&&arr[j-1]>temp);
    arr[j] = temp;
    }
    }
    return 0;
    }
    
    //交换排序---冒泡排序,快速排序
    //原理:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
    //冒泡排序080301
    int BubbleSort(int arr[],int len){
    int k,temp ;
    for(int i=0;i<len-1;i++){
    k = i;
    for(int j=i+1;j<len;j++){
    if(arr[j]<arr[k])
    k = j;
    }
    if(k!=i){
    temp = arr[i];
    arr[i] = arr[k];
    arr[k] = temp;
    }
    }
    return 0;
    }
    //快速排序080302
    int Partition(int arr[],int len,int i,int j){
    int pivot = arr[i];
    while(i<j){
    while(i<j&&arr[j]>=pivot){
    j--;
    }
    if(i<j){
    arr[i++] = arr[j];
    }
    while(i<j&&arr[i]<=pivot){
    i++;
    }
    if(i<j){
    arr[j--] = arr[i];
    }
    }
    arr[i] = pivot;
    return i;
    }
    int QuickSort(int arr[],int len,int low=0,int high=SIZE){
    int pivotpos;
    if(low<high){
    pivotpos = Partition(arr,len,low,high);
    QuickSort(arr,len,low,pivotpos-1);
    QuickSort(arr,len,pivotpos+1,high);
    }
    return 0;
    }
    
    
    
    //直接选择排序080401
    //原理:每一趟从待排序的记录中选出关键字最小的记录,顺序放到已排好序的子文件的最后
    int StraightSelect(int arr[],int len){
    int temp=0;
    int k;
    for(int i=0;i<len;i++){
    k=i;
    for(int j=k+1;j<len;j++){
    if(arr[j]<arr[k]){
    k = j;
    }
    }
    if(k!=i){
    temp = arr[k];
    arr[k] = arr[i];
    arr[i] = temp;
    }
    }
    return 0;
    }
    
    //桶排序
    
    //打印数组
    int printarr(int arr[],int len){
    
    for(int i=0;i<len;i++){
    if(i%10==0)
    cout<<endl;
    cout<<setw(4)<<arr[i]<<" ";
    }
    cout<<endl;
    return 0;
    }
    
    int main()
    {
    int arr[SIZE];
    int len = sizeof(arr)/sizeof(arr[0]);//SIZE
    srand( (unsigned)time( NULL ) );
    for(int i=0;i<len;i++){
    arr[i] =rand()%MAX;
    }
    printarr(arr,len);
    // StraightSelect(arr,len);
    // InsertSort(arr,len);
    // BubbleSort(arr,len);
    QuickSort(arr,len);
    printarr(arr,len);
    
    return 0;
    }
    View Code

     

  • 相关阅读:
    Top 10 Product Manager Skills To Boost Your Resume In 2021
    大数据知识梳理
    B端产品如何设计权限系统?
    华三盒式交换机MAC、ARP、Route性能表项参数查询
    中了传说中的挖矿病毒
    SqlServer 2019 事务日志传送
    docker中生成的pdf中文是方框的解决方案
    The Live Editor is unable to run in the current system configuration
    2021 面试题大纲
    五分钟搞定Docker安装ElasticSearch
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499611.html
Copyright © 2011-2022 走看看