• 用38行C++代码实现随机排序


    大家好

    好久没有发过文章了,今天来发一篇。

    你看着我这个看起来很正经的题目,其实不然,这是我自己发明的一种 非常好用 排序方法

    它的时间复杂度在 O(n) 和 O(∞) 之间,主要看运气...

    怎么搞

    我之前写过一篇关于排序的文章,当时就提到了这个排序方法,

    当时我的思路是随机下标,遍历数组把 a[i] 位置改成 a [随机数] 位置上的数,还要给下标去重...最后,程序不出意料地爆了99+个错。。。

    直到今天,我突然想起来,并有了一种更完美的思路:

    1. 先写一个 IsUp 函数,用来判断数组是不是升序(因为我要升序排序)

    1. bool IsUp(int w[]){
    2. for(int i=0;i-1;i++){
    3. if(w[i+1]return false;
    4. }
    5. return true;
    6. }

    参数是一个数组,然后遍历它,注意只遍历到 n-1 ,因为我要判断后面的元素如果小于前面的元素,就 return false,如果循环到n,访问下标是 i+1 的元素时会报错。

    2.我们可以打乱数组!再写一个打乱数组的函数。

    1. void random(int a[],int n){
    2. int index,tmp,i;
    3. srand(time(NULL));
    4. for(i=0;i
    5. index=rand()%(n-i)+i;
    6. if (index != i){
    7. tmp = a[i];
    8. a[i] = a[index];
    9. a[index] = tmp;
    10. }
    11. }
    12. }

    随机下标,如果和当前位置的下标不一样即可。

    3.最后主程序一个死循环,随机到为升序为止。

    全部代码

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int n,a[10010];
    7. bool IsUp(int w[]){
    8. for(int i=0;i-1;i++){
    9. if(w[i+1]return false;
    10. }
    11. return true;
    12. }
    13. void random(int a[],int n){
    14. int index,tmp,i;
    15. srand(time(NULL));
    16. for(i=0;i
    17. index=rand()%(n-i)+i;
    18. if (index != i){
    19. tmp = a[i];
    20. a[i] = a[index];
    21. a[index] = tmp;
    22. }
    23. }
    24. }
    25. int main(){
    26. cout<<"输入要排序数的数量:";cin>>n;
    27. cout<<"输入每个数:";
    28. for(int i=0;i>a[i];
    29. cout<<"正在排序..."<
    30. while(1){
    31. random(a,n);
    32. if(IsUp(a)){
    33. for(int i=0;i' ';
    34. break;
    35. }
    36. }
    37. return 0;
    38. }

  • 相关阅读:
    semaphere部署,配置ldap
    【学习笔记】正则表达式及其在VS Code,Word中查找替换的应用
    webp格式如何转换成jpg?
    Avalon总线协议汇总
    笨方法学Python
    Spring Boot业务系统如何实现海量数据高效实时搜索
    VirtualApp系统升级适配方法论(1)——一切从源码来
    Leetcode.2594 修车的最少时间
    如何做一场高质量故障复盘
    java-多态
  • 原文地址:https://blog.csdn.net/m0_64036070/article/details/126443112