一 冒泡排序
void maopao(int a[],int len){ int i,j,temp; for(i = 0;i < len - 1 ; i ++){//从第一个到倒数第二个 for (j = 0 ; j < len - 1 - i ; j ++)//排在后的是已经排序的 { if (a[j] > a[j + 1])//大的数换到后面去 { temp = a[j]; a[j] = a[j + 1]; a [j + 1] = temp; } } } }4.时间复杂度和空间复杂度
时间复杂度是O(n^2),空间复杂度是O(1)。二、选择排序
1.简介
选择排序是一种不稳定的排序方法,每趟从待排序的数据元素中选出最小或者最大的一个元素,顺序放在已排好序的数列的最后。直到全部待排序的数据元素排完。2.原理
对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
3.代码
时间复杂度为O(n^2),空间复杂度为O(1)。
void xuanze(int a[],int len){ int i , j , t , temp; for (i = 0 ; i < len - 1 ;i ++) { t = i; for (j = i + 1 ; j < len ; j ++)//前面的实排好的 { if (a[t] > a[j]) { t = j;//记下该趟最小数的序号 } } if (t != i)//如果序号不变就什么也不做 { temp = a[t];//否则元素交换 a[t] = a[i]; a[i] = temp; } } } 4.时间复杂度和空间复杂度三、快速排序
1.简介
快速排序(Quick Sort)是一种有效的排序算法。虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在
内存使用、程序实现复杂性上表现优秀,尤其是对快速排序算法进行随机化的可能,使得快速排序在一般情况下是最实用的排序方法之一。
2.原理
快速排序的实现基于分治法,具体分为三个步骤。假设待排序的序列为L[m..n]。 分解:序列L[m .. n]被划分成两个可能为空的子序列L[m .. pivot-1]和L[pivot+1 .. n],使L[m .. pivot-1]的每个元素均小于或等于L[pivot],同时L[pivot+1.. n]的每个元素均大于L[pivot]。其中L[pivot]称为这一趟分割中的主元(也称为枢轴、支点)。 解决:通过递归调用快速排序,对子序列L[m .. pivot-1]和L[pivot+1 ..
3.代码void qSort(int a[], int low, int high){ int temp; int mid = low;//定义一个中索引,用于记录一次排序后确定位置的一个元素索引 int right = high;//记录最右元素索引 //默认中值是左值,现在要把凡是比中值大的元素放到中值左边 while(right > mid){//因此从右开始向中值遍历,到达中值时遍历结束 if (a[right] < a[mid])//如果右值比中值还小,说明他不该在右边,要把它放到左边 { temp = a[mid];//所以先把中值的地盘腾出来 a[mid] = a[right];//把比中值小的那个数放在那儿 //中值没地方放,必须右移移位,但是直接右移会覆盖原来他右边的那个值 a[right] = a[++mid];//不过right索引的空间已经腾出来了,就把中值原来右边的值放到right a[mid] = temp;//然后就可以把mid右移一位 } else{ right--;//否则的话说明right已然大于等于mid,不用移动,继续判断right左边那个数 } }//这样right与mid重合之时,退出循环,此时mid的位置已经确定了就是排完序后他的位置 //因为他左边的都比他小,右边的都比他大 if (mid - low > 1)//如果low到mid之间还有两个或以上元素,还要对他们排序 { qSort(a, low, mid - 1); } if (high - mid > 1)//右边那半也是一样 { qSort(a, mid + 1, high); } }4.时间复杂度和空间复杂度
快速排序的平均时间复杂度为O(nlogn),空间复杂度为O(1)。
新闻热点
疑难解答