插入排序
数组
#include<iostream>
using namespace std;
void swap(int arr[], int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void InsertSort(int arr[], int n){
for(int i=1;i<n;i++){
for(int j=i;j>0;j--){
if(arr[j]<arr[j-1])
swap(arr, j-1, j);
else
break;
}
}
}
void Print(int arr[], int n){
for(int i=0;i<n;i++){
cout<<arr[i]<<' ';
}
cout<<endl;
}
int main(){
int test[] = {4, 3, 2, 1};
InsertSort(test, 4);
Print(test, 4);
return 0;
}
链表
#include<iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
void InsertBefore(Node *p1, Node *p2, Node *pre1, Node *pre2){
if(pre2!=NULL) pre2->next = p1;
pre1->next = p1->next;
p1->next = p2;
}
Node* InsertSort(Node *head){
if(head==NULL) return NULL;
Node *p1 = head->next;
Node *pre1 = head;
while(p1){
Node *p2 = head;
Node *pre2 = NULL;
while(p2->data<p1->data){
pre2 = p2;
p2 = p2->next;
}
if(p2!=p1){
InsertBefore(p1, p2, pre1, pre2);
if(pre2==NULL) head = p1;
}
pre1 = p1;
p1 = p1->next;
}
return head;
}
int main(){
Node *node1 = new Node;
Node *node2 = new Node;
Node *node3 = new Node;
node1->data = 4;
node1->next = node2;
node2->data = 3;
node2->next = node3;
node3->data = 2;
node3->next = NULL;
Node *head = InsertSort(node1);
while(head){
cout<< head->data << " ";
head = head->next;
}
cout<<endl;
}
快速排序
数组
void quickSort(int arr[], int l, int r) {
if(l<r) {
int p = s[l];
int i = l;
int j = r;
while(i < j) {
while(i < j && arr[j]>=p) j--;
if(i<j) {
arr[i] = arr[j];
i++;
}
while(i < j && arr[i]<p) i++;
if(i<j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = p;
quickSort(s, l, i-1);
quickSort(s, i+1, r);
}
}