当前位置:网站首页>交换类排序
交换类排序
2022-07-21 02:24:00 【Ramos_4】
一、冒泡排序
1.算法思想
特征:通常情况下,冒泡排序最少进行1次冒泡,最多进行n-1次冒泡。初始序列为逆序时,需要进行n-1次冒泡,并且需要交换的次数最多,此时的比较次数为:n(n-1)/2。初始序列为正序时,进行1次冒泡(无交换,比较次数为:n-1,移动次数为0)就可以终止算法。
2.举例流程:
原始序列关键字:(49,38,65,97,76,13,27,49)
2.代码
C++:
//冒泡排序
void BubbleSort(int A[],int n){
for(int i=0;i<n-1;i++){
bool flag=false; //表示本趟冒泡是否发生交换的标志
for(int j=n-1;j>i;j--) //一趟冒泡过程
if(A[j-1]>A[j]){
//若为逆序
swap(A[j-1],A[j]); //交换
flag=true;
}
if(flag==false)
return; //本趟遍历后没有发生交换,说明表已经有序
}
}
Java:
// 冒泡排序,a表示数组,n表示数组大小
public void bubbleSort(int[] a, int n) {
if (n <= 1) return;
for (int i = 0; i < n; ++i) {
// 提前退出冒泡循环的标志位
boolean flag = false;
for (int j = 0; j < n - i - 1; ++j) {
if (a[j] > a[j+1]) {
// 交换
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
flag = true; // 表示有数据交换
}
}
if (!flag) break; // 没有数据交换,提前退出
}
}
二、快速排序
1.算法思想(基于分治法)
特征:在排序的数据已经基本有序或正序时,快排速度最慢;当每次的枢轴元素都能把表等分为长度相近的两个子表时,快排速度最快。note:快速排序每趟仅将一个元素(就是枢轴元素)归位!
2.举例流程:
原始序列关键字:(49,38,65,97,76,13,27,49)
2.Java代码
public class MyQuiteSortDemo {
public static void main(String[] args) {
// 1.从右开始找比基准数小的
// 2.从左开始找比基准数大的
// 3.交换两个值的位置
// 4.right继续往左找,left继续往右找,直到两个指针指向同一个索引为止
// 5.基准数归位
int[] arr = {
6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quickSort(arr,0,arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quickSort(int[] arr, int left, int right) {
// 递归结束的条件
if(right < left){
return;
}
//零时存储left和right的值,也相当于存储基准元素的位置
int left0 = left;
int right0 = right;
//以第一个元素作为枢轴
int pivot = arr[left0];
while(left != right){
// 1.从右开始找比基准数小的
while(arr[right] >= pivot && right > left){
right--;
}
// 2.从左开始找比基准数大的
while(arr[left] <= pivot && right > left){
left++;
}
// 3.交换两个值的位置
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
//基准数归位
int temp = arr[left];
arr[left] = arr[left0];
arr[left0] = temp;
// 递归调用自己,将左半部分排好序
quickSort(arr,left0,left-1);
// 递归调用自己,将右半部分排好序
quickSort(arr,left +1,right0);
}
}
2.C代码
边栏推荐
- codeforces每日5题(均1500)-第二十一天
- NFT与奢侈品文化的天然契合:NFT满足了人类寻求独特性和地位的天性
- Description du développement de l'ESB en combinaison avec la plateforme UMC Cloud
- The domestic epidemic is repeated. How can offline physical stores be transformed to break through the dilemma?
- ACM集训7月5号
- 关于GB 2312 编码顺序的研究
- Ctfhub information disclosure
- Embedded learning: introduction to Cortex-M series chips
- ACM集训7月4号
- 数字孪生技术海上风电场解决方案
猜你喜欢
Authoring practice | authorization management makes it easier for enterprise users to log in
STM32 DHT11温湿度传感器模块学习总结
canal.deployer-1.1.6 遇到dump address has an error, retrying. caused by问题
测试必知必会的Mock数据方法
what? Does the multi merchant system not adapt to app? This is coming!
Php-cgi Remote Code Execution Vulnerability (cve-2012-1823)
Experimental requirements of cy5-pna cyanine dye Cy5 labeling PNA
[translation] principles for designing and deploying extensible applications on kubernetes
Description du développement de l'ESB en combinaison avec la plateforme UMC Cloud
Stm32f40x minimum system
随机推荐
什么?多商户系统不适配APP?这不就来了么!
Digital twin technology creates a visualization solution for smart mines
2022 dsctf first digital space security attack and defense competition
Okaleido tiger NFT即将登录Binance NFT平台,NFT权益时代即将开启
【翻译】开发人员的技术写作
读秀数据库的用法+全国图书馆参考咨询联盟
安防视频监控平台EasyCVR数据库字段无法更新,如何优化?
C语言练习题目+答案:26-30
Golang collection: custom types and method sets
LeetCode:1260. 二维网格迁移【一维展开+拼接】
Qt development skills and three problems
数字孪生落地高铁桥梁可视化解决方案
Linux中安装Redis
GrayLog分布式日志组件来提高查日志效率!
【翻译】用Kubernetes + Helm + Flux提高稳定性和可靠性!
Synthesis route of dansyl fluorescein labeled peptide nucleic acid coupled peptide | dansyl AHX PNA fluorescein labeled peptide nucleic acid
OSPF基础
Visual solution of digital twin landing high-speed railway bridge
Demystifying Closures, Futures and async-await in Rust–Part 3: Async & Await
解决Kettle8.2版本錶輸入-Excel輸出時,時間字段空白