zoukankan      html  css  js  c++  java
  • 【整理】常见的排序算法

    常见的排序算法

      1 #include<iostream>
      2 using namespace std;
      3 
      4 void quick(int a[],int left, int right)
      5 {
      6     if (left == right)
      7         return;
      8     int index = (right + left + 1) / 2;
      9     int temp;
     10     temp = a[index];
     11     a[index] = a[right];
     12     a[right] = temp;
     13     int p = 0;
     14     int prev = -1;
     15     while (p != right)
     16     {
     17         if (a[p] >= a[right])
     18         {
     19             if ((p - prev) != 1)
     20             {
     21                 prev++;
     22                 temp = a[p];
     23                 a[p] = a[prev];
     24                 a[prev] = temp;
     25             }
     26             else
     27                 prev++;
     28         }
     29         p++;
     30     }
     31     prev++;
     32     temp = a[p];
     33     a[p] = a[prev];
     34     a[prev] = temp;
     35     if(prev!=left)
     36         quick(a, left, prev-1);
     37     if(prev!=right)
     38         quick(a, prev+1, right);
     39 }
     40 
     41 int main()
     42 {
     43     int n,temp;
     44     cout << "请输入数组个数:" << endl;
     45     cin >> n;
     46     int *a = new int [n];
     47     for (int i = 0; i < n; i++)
     48     {
     49         cin >> temp;
     50         a[i] = temp;
     51     }
     52     
     53     //冒泡排序-从小到大
     54     for(int i=0;i<n-1;i++)
     55         for(int j=0;j<n-1-i;j++)
     56             if (a[j] > a[j + 1])
     57             {
     58                 temp = a[j];
     59                 a[j] = a[j + 1];
     60                 a[j + 1] = temp;
     61             }
     62     for (int i = 0; i < n; i++)
     63         cout << a[i];
     64     cout << endl;
     65 
     66     //选择排序-从大到小
     67     int i,j,max;
     68     for (i = 0; i < n - 1; i++)
     69     {
     70         max = i;
     71         for (j = i; j < n; j++)
     72             if (a[j] > a[max])
     73                 max = j;
     74         if (max != i)
     75         {
     76             temp = a[i];
     77             a[i] = a[max];
     78             a[max] = temp;
     79         }
     80     }
     81     for (int i = 0; i < n; i++)
     82         cout << a[i];
     83     cout << endl;
     84 
     85     //插入排序-从小到大
     86     for (i = 1; i < n; i++)
     87     {
     88         temp = a[i];
     89         j = i - 1;
     90         while (j >= 0 && a[j] > temp)
     91         {
     92             a[j + 1] = a[j];
     93             j--;
     94         }
     95         a[j + 1] = temp;
     96     }
     97     for (int i = 0; i < n; i++)
     98         cout << a[i];
     99     cout << endl;
    100     
    101     //快速排序-从大到小
    102     quick(a,0, n - 1);
    103     for (int i = 0; i < n; i++)
    104         cout << a[i];
    105     cout << endl;
    106 
    107     delete[] a;
    108     system("pause");
    109     return 0;
    110 
    111 }
  • 相关阅读:
    浅谈块元素绝对定位的margin属性
    因浏览器而异的空白节点(js清除空白节点)
    区分中英文字符的两种方法
    js中 visibility和display的区别 js中 visibility和display的区别
    观察者模式
    单例模式
    mongodb
    javascript的加载、解析、执行对浏览器渲染的影响
    EM算法原理
    YARN
  • 原文地址:https://www.cnblogs.com/engraver-lxw/p/7623869.html
Copyright © 2011-2022 走看看