/*
//选择排序:(用脚标的方法进行(最优))
//思想:选择排序就是遍历数组,每次遍历都将将比较的最大值拿出来,放在数组中最后打出。
#include<stdio.h>
int main(){
int a[6]={1,2,4,3,8,5};
int c ,temp;//这里的c用来表示最大值的时候的角标是多少
for (int i=0; i<5; i++) {
c=i;
for (int j=i+1; j<6; j++) {
if (a[c]<a[j]) {//这里相当于让里层从第i+1个数开始跟第i个数比较
c=j;//引入c就是为了不能改变外层的i的同时交换角标
}
}
temp=a[i];
a[i]=a[c];//刚才的c=j,所以这里的a[c]等于刚才的最大值 a[?]max
a[c]=temp;
//里层循环的完成一次,a[第一个数]就==a[]最大值
}//每次外层循环完成对里层循环的范围控制
for (int i=0; i<6; i++) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
*/
/*
//选择排序:使用临时变量存储最大值
#include<stdio.h>
int main(){
int a[6]={5,2,4,6,1,0};
int t;
for (int i=0; i<6; i++) {
for (int j=0; j<6; j++) {
if (a[j]>a[i]) {
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for (int i=5; i>=0; i--) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
*/
/*
********************
//倒序选择排序:
#include<stdio.h>
int main(){
int arr[]={1,2,4,3,8,5};
for (int i=0; i<6; i++) {
for (int j=0; j<=i; j++) {
int t;
if (arr[j]<arr[i]) {
t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
for (int j=0; j<6; j++) {
printf("%d ",arr[j]);
}
printf("\n");
return 0;
}
*********************
*/
//===============================================================
//冒泡排序:
/*
* 思想:对数组进行排序。让相邻的两个数进行比较,若后一个数小于前一个数,则交换这两个数的值
* 第一遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-1]和arr[n],若后一个数小于前一个数,则这交换两个数的值
第二遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-2]和arr[n-1],若后一个数小于前一个数,则这交换两个数的值
第三遍:让arr[0]和arr[1]比较、arr[1]和arr[2]比较、让arr[2]和arr[3]比较、...arr[n-3]和arr[n-2],若后一个数小于前一个数,则这交换两个数的值
.
.
.
最后一遍:让arr[0]和arr[1]比较,若arr[1]小于arr[0],则交换这两个数的值
* @param arr 接收数组
* @param size 接收数组长度
*
*/
/*
#include<stdio.h>
int main(){
// 对数组排序
int arr[]={1,2,4,3,8,5};
for (int i = 0; i <6; i++) {
for (int j=0;j<6-i-1;j++) {
if (arr[j] < arr[j+1]) {
arr[j] = arr[j]^arr[j+1];
arr[j+1] = arr[j]^arr[j+1];
arr[j] = arr[j]^arr[j+1];
}
}
}
// 遍历排序后的数组
for (int i=0; i<6; i++) {
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
*/
|
|