排序:正序冒泡,交错冒泡,插入排序,选择排序,快速排序

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 #include<string.h>
  5 const int N=10;                            //修改随机数据量
  6 bool onOroff=1;                            //数组打印开关:1要打印,0不打印
  7 void bubble_sort(int a[],int n)
  8 {
  9     for(int i=0 ; i<N ; ++i)
 10     {
 11         for(int j=0 ; j<N-1 ; ++j)
 12             if(a[j]>a[j+1])
 13             {
 14                 int tmp=a[j+1];
 15                 a[j+1]=a[j];
 16                 a[j]=tmp;
 17             }
 18     }
 19 }
 20
 21 void bubble_sort2(int a[],int n)
 22 {
 23     int i=0,j=n-1;
 24     while(i<j)
 25     {
 26         for(int k=i ; k<=j-1 ; ++k)
 27             if(a[k]>a[k+1])
 28             {
 29                 int tmp=a[k+1];
 30                 a[k+1]=a[k];
 31                 a[k]=tmp;
 32             }
 33         --j;
 34         if(i>=j)
 35             break;
 36         for(int k=j ; k>=i ; --k)
 37             if(a[k]<a[k-1])
 38             {
 39                 int tmp=a[k-1];
 40                 a[k-1]=a[k];
 41                 a[k]=tmp;
 42             }
 43         ++i;
 44     }
 45 }
 46
 47 void insert_sort(int a[],int n)
 48 {
 49     int i=1,j=0,now=0,tmp=0;
 50     for(i=1 ; i<N ; ++i)
 51     {
 52         now=a[i];
 53         for(j=i-1 ; j>=0 ; --j)
 54         {
 55             if(a[j]>now)
 56                 a[j+1]=a[j];
 57             else
 58                 break;
 59         }
 60         a[j+1]=now;
 61     }
 62 }
 63
 64 void select_sort(int a[],int n)
 65 {
 66     int MIN,MINi,tmp;
 67     for(int i=0 ; i<N ; ++i)
 68     {
 69         MIN=0x3fffffff;
 70         for(int j=i ; j<N ; ++j)
 71             if(a[j]<MIN)
 72             {
 73                 MINi=j;
 74                 MIN=a[j];
 75             }
 76         tmp=a[i];
 77         a[i]=a[MINi];
 78         a[MINi]=tmp;
 79     }
 80 }
 81
 82 int part_qsort(int a[], int n ,int l,int r)
 83 {
 84     int mid=0,tmpmid=a[l];
 85     while(l<r)
 86     {
 87         while(l<r && a[r]>=tmpmid)
 88             --r;
 89         if(l<r)
 90         {
 91             a[l]=a[r];
 92             ++l;
 93         }
 94         else
 95             break;
 96         while(l<r && a[l]<=tmpmid)
 97             ++l;
 98         if(l<r)
 99         {
100             a[r]=a[l];
101             --r;
102         }
103         else
104             break;
105     }
106     a[l]=tmpmid;
107     return l;
108 }
109
110 void myquick_sort(int a[],int n,int l,int r)
111 {
112     int position;
113     if(l<r)
114     {
115         position=part_qsort(a,n,l,r);
116         myquick_sort(a,n,l,position-1);
117         myquick_sort(a,n,position+1,r);
118     }
119 }
120
121 void P(int a[],int n)
122 {
123     if(1==onOroff)
124     {
125         for(int i=0 ; i<N ; ++i)
126             printf("%d ",a[i]);
127         printf("\n");
128     }
129 }
130
131 int main(int argc,char* argv[])
132 {
133     //排序
134     clock_t bg,end;
135     srand(time(NULL));
136     int arr3[N];
137     for(int i=0 ; i<N ; ++i)
138         arr3[i]=rand()%100;
139     printf("随机数据量:%d\n原始数组:",N);
140     P(arr3,N);
141     printf("\n");
142     //正序冒泡
143     int arr_bubble[N];
144     memcpy(arr_bubble,arr3,sizeof(arr3));
145     bg=clock();
146     bubble_sort(arr_bubble,N);
147     end=clock();
148     printf("正序冒泡:");
149     P(arr_bubble,N);
150     printf("耗时:%5.15f秒\n\n",(double)(end-bg)/CLOCKS_PER_SEC);
151     //交错冒泡
152     memcpy(arr_bubble,arr3,sizeof(arr3));
153     bg=clock();
154     bubble_sort2(arr_bubble,N);
155     end=clock();
156     printf("交错冒泡:");
157     P(arr_bubble,N);
158     printf("耗时:%5.15f秒\n\n",(double)(end-bg)/CLOCKS_PER_SEC);
159     //插入排序
160     memcpy(arr_bubble,arr3,sizeof(arr3));
161     bg=clock();
162     insert_sort(arr_bubble,N);
163     end=clock();
164     printf("插入排序:");
165     P(arr_bubble,N);
166     printf("耗时:%5.15f秒\n\n",(double)(end-bg)/CLOCKS_PER_SEC);
167     //选择排序
168     memcpy(arr_bubble,arr3,sizeof(arr3));
169     bg=clock();
170     insert_sort(arr_bubble,N);
171     end=clock();
172     printf("选择排序:");
173     P(arr_bubble,N);
174     printf("耗时:%5.15f秒\n\n",(double)(end-bg)/CLOCKS_PER_SEC);
175     //快速排序
176     memcpy(arr_bubble,arr3,sizeof(arr3));
177     bg=clock();
178     myquick_sort(arr_bubble,N,0,N-1);
179     end=clock();
180     printf("快速排序:");
181     P(arr_bubble,N);
182     printf("耗时:%5.15f秒\n\n",(double)(end-bg)/CLOCKS_PER_SEC);
183
184     system("pause");
185     return 0;
186 }

时间: 2024-11-03 22:36:27

排序:正序冒泡,交错冒泡,插入排序,选择排序,快速排序的相关文章

Java数据结构与算法(2) - 排序(冒泡、插入和选择排序)

排序需要掌握的有冒泡排序,插入排序和选择排序. 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程序从第二个数组项开始a[1]),此时队列已经拍好了一部分.此时,将后边的数组项一次插入到已经排好序的部分队列中. 选择排序: 从第一个数组项开始,找到包括该数组项在内的所有往后数组项中的最小项与当前项进行交换,其实相当于依次将最小值往前冒泡. 示例代码: package chap03.BubbleSort; // bu

插入排序,选择排序

1.插入排序 4 2 5 1 6 3 选定4, [0,0]这个区间是已处理的有序区间 现在遍历[1,5]这个区间,逐渐插入已处理的有序区间 把2拿出来 与[4]比较,发现<4 ,把4挪到它后面的位置处 _ 4 5 1 6 3 考察之前的4所在的位置0位是不是应该插入的地,2与这个预插入位置之前的元素比较,发现已经到头 所以0位是2正确插入的位置 插入后 2 4 5 1 6 3 然后考察5 把5挖出来,看下5是否能放在2这个位置,需要和2位置前面的元素比较 发现5>前面的元素4,所以5 放进2这

给类排序复杂度比较和冒泡排序与选择排序

各个排序的比较 冒泡排序 export default (arr) => { // 冒泡排序 for (let i = arr.length - 1, tmp; i > 0; i--) { for (let j = 0; j < i; j++) { tmp = arr[j] if (tmp > arr[j + 1]) { arr[j] = arr[j + 1] arr[j + 1] = tmp } } } return arr } 选择排序 export default (arr)

js数组操作 求最大值,最小值,正序、倒叙大小值排序,去重复

var arr = [1,5,2,56,12,34,21,3,5] Math.min.apply({},arr) // 1 Math.max.apply({},arr) // 56 arr.sort((m,n)=>m-n) // [1, 2, 3, 5, 5, 12, 21, 34, 56] arr.sort((m,n)=>n-m) //[56, 34, 21, 12, 5, 5, 3, 2, 1] 去重复 var arr = [2,1,4,3,2,4,2,3,4,2,6,5,5] var o

数组排序-冒泡排序-插入排序-选择排序-Java实现

package org.lyk.entities; public class SortHelper { public static void BubbleSort(int[] array) { for(int i = array.length-1; i >= 1 ; i--) { for(int j = 0; j < i ; j++) { if(array[j] > array[j+1]) { int temp = array[j]; array[j] = array[j+1]; arr

Java中的基础排序算法(二):简单选择排序、堆排序

参考文章:https://mp.weixin.qq.com/s/VjqZNPg6dAEReAzqZcb_yw 原文链接:www.jianshu.com/p/5e171281a387 原文地址:https://www.cnblogs.com/lotuses/p/11640671.html

快排,冒泡排,选择排序,希尔排序

package cn.hncu.dataStruct; public class SortMethods { /* 算法好坏的评价指标(一般只在n值非常大的时候才会考虑,如n取10万): * 1.时间复杂度: 通俗点,就是指程序运行的快慢(时间)---通常用计算机的运算(算术,赋值)次数来代替 * 2.空间复杂度: 占用内存空间的大小---通常用程序中使用了多少变量(栈内存.堆内存),这些变量总共占了多少内存 */ public static void main(String[] args) {

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

笔记二:计数排序、选择排序、冒泡排序、插入排序

计数排序 1. 名次 :所谓名次,通俗理解即为该元素在序列中排行老几的意思. 2..如何求名次:依次对每一个元素进行比较,若排在自己(该元素)前面的元素比自己大,则前面的元素在排行计数上加1,反之则自己加1. 3.利用附加数组的计数排序:根据自身名次重新整理一份排序序列存储在附加数组中,然后将附加数组值拷贝到原序列中. 1)代码: template<typename T> void SortClass<T>::rank(T a[], int n, int r[]) { //给数组a